log4j vs logback [закрито]


152

Ми використовуємо log4j за саморобною обгорткою. Зараз ми плануємо використовувати набагато більше можливостей.

Чи слід оновити до зворотного зв'язку?

(Я маю на увазі рамки не фасад, як SLF4J)


1
Зворотній зв'язок звучить дуже схоже на журнал jakarta commons - які основні відмінності?
мат b

12
SLF4J (це фасад) звучить схоже на commons.logging. Основна відмінність полягає в тому, що SLF4J використовує статичне зв'язування, тоді як commons.logging використовує певну стратегію вирішення. Зворотній зв'язок (реалізація фасаду (тобто немає додаткового шару обгортки) фасаду) можна порівняти з LOG4J, але має більш багатий API.
Хусі

Відповіді:


190

Зворотний зв'язок спочатку реалізує API SLF4J. Це означає, що якщо ви використовуєте режим зворотного зв'язку, ви фактично використовуєте API SLF4J. Теоретично ви могли використовувати внутрішній інтерфейс API зворотного зв'язку безпосередньо для ведення журналів, але це сильно не рекомендується. Вся документація щодо зворотного зв'язку та приклади реєстраторів записуються в рамках API SLF4J.

Таким чином, використовуючи логічний зворот, ви фактично використовуєте SLF4J, і якщо з якоїсь причини ви захочете перейти назад до log4j, ви можете це зробити протягом декількох хвилин, просто скинувши slf4j-log4j12.jar на шлях вашого класу.

Під час переходу з logback до log4j, окремі частини, що містяться у файлі конфігурації logback.xml , все-таки потребують міграції до його еквівалента log4j, тобто log4j.properties . Під час міграції в іншому напрямку конфігурацію log4j, тобто log4j.properties , необхідно перетворити на її еквівалент зворотного зв'язку. Для цього є он-лайн інструмент . Обсяг роботи, що бере участь у переміщенні файлів конфігурації, значно менший, ніж робота, необхідна для міграції викликів реєстратора, розповсюджених у всьому вихідному коді програмного забезпечення та його залежностях.


28
Це знову можливість поговорити з розробником такого широко популярного програмного забезпечення. Дякую Ceki за log4j.
Srujan Kumar Gulla

7
Відмова: Цей хлопець є оригінальним розробником усіх Log4j, SLF4J та Logback. Але більше не працюйте для Log4j.
Віктор Стафуса

56

Ви повинні? Так .

Чому? Log4J , по суті, був вимкнений Logback .

Це терміново? Можливо, не.

Це безболісно? Можливо, але це може залежати від ваших заяв на реєстрацію.

Зауважте, що якщо ви дійсно хочете максимально використати переваги LogBack (або SLF4J), то вам дійсно потрібно писати належні заяви реєстрації . Це дасть такі переваги, як швидший код через ледачу оцінку та менше рядків коду, оскільки ви можете уникнути охоронців.

Нарешті, я настійно рекомендую SLF4J. (Навіщо відтворювати колесо з власним фасадом?)


48
Примітка: Проект log4j не вважає застарілим log4j.
Thorbjørn Ravn Andersen

17
Термінологію слід уточнити; Однозначно автор проекту log4j вважає зворотний зв'язок правонаступником log4j. Це один і той же автор обох проектів, тому його думка повинна мати певну вагу; сам проект "log4j" насправді нічого "не вважає". Нинішня група людей, пов'язаних з log4j, має різні думки (деякі насправді згодні, а інші не дивно згодні). Маючи трохи більше історії за нами (3 роки після оригінального коментаря), SLF4J + Logback продовжують набирати позиції над Log4j.
Майкл

@michael_n Зверніть увагу, що Log4j 1 НЕ написав жодна людина. Неправильно сказати "того ж автора". Чекі - важливий автор, не сумніваючись, але не єдиний. Насправді багато людей допомогли зробити Log4j 1 таким, яким він є.
Крістіан

@Christian "НЕ писали ...", звичайно, це слід розуміти для будь-якого зрілого апаш-проекту (і моя кваліфікація, "поточна група людей, пов'язаних з log4j"); тим не менш, якби я міг відредагувати коментар, я б сказав " спочатку автор", як зазначено у статті Вікіпедії. Re: "Насправді багато людей допомогли зробити Log4j 1 таким, яким він є" , тобто абсолютно однозначно правдивим (тобто для кращого чи гіршого); а також, певним чином, сприяв створенню slf4j + logback :-)
michael

3
Отож, для чого вам усім битися за ту чи іншу бібліотеку журналів? Чому ми намагаємося вбити / просувати бібліотеки? Принаймні, наведіть кілька раціональних міркувань ЧОМУ один краще, ніж інший. Боже, переповнення стека - це безлад.
Користувач

48

У світі ведення журналів є Фасади (як Apache Commons Logging, slf4j або навіть API Log4j 2.0) та реалізації (Log4j 1 + 2, java.util.logging, TinyLog, Logback).

В основному вам слід замінити саморобну обгортку на slf4j АКО, і тільки якщо ви чомусь із цим не задоволені. Хоча Apache Commons Logging насправді не забезпечує сучасний API, slf4j та новий фасад Log4j 2 забезпечують це. Зважаючи на те, що досить багато додатків використовують slf4j як обгортку, це може мати сенс використовувати.

slf4j дає ряд приємних цукрових API, як цей приклад із slf4j docs:

logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);

Це змінна підміна. Це також підтримується Log4j 2.

Однак вам потрібно знати, що slf4j розроблений QOS, який також підтримує зворотний зв'язок. Log4j 2.0 випікається в програмному фонді Apache. За останні три роки там знову зросла яскрава та активна громада. Якщо ви цінуєте Open Source так, як це робиться програмним фондом Apache, з усіма його гарантіями, ви можете переглянути, використовуючи slf4j на користь прямого використання Log4j 2.

Будь ласка, запиши:

У минулому log4j 1 активно не підтримувався, поки Logback був. Але сьогодні справи різні. Log4j 2 активно підтримується і випускається майже регулярно. Він також включає безліч сучасних функцій і -imho- робить кілька речей кращими, ніж Logback. Іноді це лише питання смаку, і ви повинні зробити власні висновки.

Я написав короткий огляд нових особливостей Log4j 2.0: http://www.grobmeier.de/the-new-log4j-2-0-05122012.html

Читаючи, ви побачите, що Log4j 2 був натхненний Logback, але й іншими рамками ведення журналу. Але база коду інша; він майже нічого не поділяє з Log4j 1 та нулем із Logback. Це призводить до деяких поліпшень, як, наприклад, Log4j 2 працює з bytestreams замість Strings під кришкою. Також він не втрачає події під час перенастроювання.

Log4j 2 може входити з більшою швидкістю, ніж інші рамки, які я знаю: http://www.grobmeier.de/log4j-2-performance-close-to-insane-20072013.html

І все ж спільнота користувачів здається значно більшою, ніж Logbacks: http://www.grobmeier.de/apache-log4j-is-the-leading-logging-framework-06082013.html

З урахуванням найкращої ідеї ви вибираєте рамки ведення журналу, які найкраще підходять до того, що ви хочете досягти. Я б не перемикав повний фреймворк, якби я відключив вхід у виробниче середовище і просто виконав базовий журнал у своєму додатку. Однак якщо ви більше заробляєте з веденням журналу, просто подивіться на функції, які надаються рамками та їх розробниками. Хоча ви отримуєте комерційну підтримку для Logback через QOS (я чув), в даний час немає комерційної підтримки для Log4j 2. З іншого боку, якщо вам потрібно зробити журнал аудиту та потребуєте високої продуктивності, наданої додатками async, це має багато сенсу перевірити log4j 2.

Зверніть увагу, незважаючи на весь комфорт, який вони забезпечують, фасади завжди мають невелику ефективність. Це, можливо, зовсім не впливає на вас, але якщо ви мало ресурсів, вам може знадобитися зберегти все, що у вас є.

Не знаючи ваших вимог краще, майже неможливо дати рекомендацію. Просто: не перемикайтеся лише тому, що багато людей переключаються. Перемикайтеся лише тому, що бачите цінність цього. І аргументація того, що log4j мертва, вже не враховується. Це живе, і жарко.

ВІДМОВА ВІДПОВІДАЛЬНОСТІ: Зараз я VP, Apache Logging Services, а також беру участь у log4j.


19

Не точно відповідаючи на ваше запитання, але якщо ви могли відійти від власноруч виготовленої обгортки, то є фасад простого ведення журналу для Java (SLF4J), на який зараз перейшов Hibernate (замість загального журналу).

SLF4J не страждає від жодної з проблем із завантажувачем класів або витоку пам'яті, що спостерігається при Jakarta Commons Logging (JCL).

SLF4J підтримує журнал JDK, log4j та logback. Тож переходити з log4j на логбек слід досить просто, коли настане час.

Редагувати: Вибачення, що я не дав про себе зрозуміти. Я пропонував використовувати SLF4J, щоб ізолювати себе від необхідності зробити важкий вибір між log4j або logback.


3
Я знаю SLF4J. Але я попросив, щоб рамки лісозаготівлі не були для фасаду!

4
Вибачення. Що я припускав, що якщо ви використовуєте SLF4J замість власного фасаду, то перехід від log4j до logback буде менш болісним?
інструментарій

Яке джерело цього цитування? Commons-журнал - перевірений компонент. У мене ніколи не було витоків пам'яті.
Kshitiz Sharma

1
@KshitizSharma - із посилання на документацію SLF4J, яку я надав: slf4j.org/manual.html
інструментарій

13

Ваше рішення має ґрунтуватися на

  • Ваша фактична потреба в цих "додаткових функціях"; і
  • Ваша очікувана вартість впровадження змін.

Вам слід протистояти бажанням змінити API лише тому, що це "новіше, блискучіше, краще". Я дотримуюсь політики "якщо це не порушено, не б'є".

Якщо у вашій програмі потрібна дуже складна рамка ведення журналу, ви, можливо, захочете розглянути чому.


3

Зрілий проект або навіть проект глибоко в стадії розробки, ймовірно, втратять більше, ніж виграш від такого оновлення, IMHO. Зворотний зв'язок, безумовно, набагато вдосконалений у масиві точок, але не в міру для повної заміни в робочій системі. Я, безумовно, розглядаю можливість зворотного зв'язку для нової розробки, але існуючий log4j досить хороший і зрілий для всього, що вже вийшов і зустрічався кінцевим користувачем. Це дуже суб'єктивно, ви повинні бачити, що варто себе.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.