2008-10-07 3 views
126

Мы используем log4j за самодельной упаковкой. Сейчас мы планируем использовать гораздо больше возможностей.log4j vs logback

Следует ли обновить до логина?

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

+1

logback звучит очень похоже на запись в jakarta commons - каковы основные отличия? – 2008-10-07 12:52:02

+12

SLF4J (который является фасадом) звучит подобно commons.logging. Основное различие заключается в том, что SLF4J использует статическое связывание, а commons.logging использует некоторую стратегию разрешения. Logback («native» (т. Е. Нет дополнительного слоя оболочки) реализация фасада) сопоставим с LOG4J, но имеет более богатый API. – Huxi 2009-06-03 04:11:32

ответ

18

Не точно ответить на ваш вопрос, но если бы вы могли отойти от вашей самодельной обертки, то есть Simple Logging Facade for Java (SLF4J), который Hibernate теперь перешел на (вместо ведение общего права).

SLF4J не имеет ни одной из проблем загрузчика класса или утечек памяти, наблюдаемых с Jakarta Commons Logging (JCL).

SLF4J поддерживает регистрацию JDK, log4j и logback. Таким образом, должно быть довольно легко переключиться с log4j на logback, когда наступит подходящее время.

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

+3

Я знаю SLF4J. Но я попросил рамки для каротажа не для фасада! – 2008-10-07 14:12:48

+4

Извинения. То, что я предлагал, было то, что если бы вы использовали SLF4J вместо своего собственного фасада, то переход с log4j на logback был бы менее болезненным? – toolkit 2008-10-07 16:12:52

12

Ваше решение должно быть основано на

  • вашей фактической потребности в этих «больше возможностей»; и
  • Ваши ожидаемые затраты на осуществление изменения.

Вы должны противостоять желанию изменить API-интерфейсы только потому, что они «более новые, более сильные, лучше». Я следую политике «если это не сломано, не пинай».

Если ваше приложение требует очень сложной структуры ведения журнала, вы можете подумать о том, почему.

164

Резервное копирование в реальном масштабе времени реализует API SLF4J. Это означает, что если вы используете logback, вы фактически используете API SLF4J. Теоретически вы можете использовать внутренности API-журнала регистрации для ведения журнала, но это очень не рекомендуется. Вся документация по журналу и примеры журналов записываются в терминах API SLF4J.

Таким образом, используя логин, вы действительно используете SLF4J, и если по какой-либо причине вы хотели бы вернуться к log4j, вы можете сделать это за несколько минут, просто отбросив slf4j-log4j12.jar на свой путь к классу.

При переходе от Logback к log4j, Logback конкретные детали, в частности, те, которые содержатся в logback.xml файл конфигурации по-прежнему должны были бы быть перенесены в его log4j эквивалент, т.е. log4j.properties. При переносе в другом направлении, конфигурация log4j, то есть log4j.properties, необходимо будет преобразовать в эквивалент журнала. Для этого есть on-line tool. Объем работы, связанной с миграцией конфигурационных файлов, составляет , а не меньше работы, необходимой для миграции вызовов журналов, распространяемых по всему исходному коду вашего программного обеспечения и его зависимостям.

52

Должны ли вы? Да.

Почему? Log4J по существу устарел от Logback.

Это срочно? Возможно, нет.

Это безболезненно? Возможно, но это может зависеть от ваших заявлений о регистрации.

Обратите внимание, что если вы действительно хотите в полной мере воспользоваться преимуществами LogBack (или SLF4J), вам действительно нужно написать proper logging statements. Это даст преимущества, такие как быстрый код из-за ленивой оценки и меньше строк кода, потому что вы можете избежать защиты.

Наконец, я настоятельно рекомендую SLF4J. (Зачем воссоздать колесо с вашим собственным фасадом?)

3

Зрелый проект или даже проект на стадии разработки, вероятно, потеряют больше, чем прибыль от такого обновления, ИМХО. Логичность, безусловно, гораздо более продвинута в массиве точек, но не в полной мере для полной замены в рабочей системе. Я бы, безусловно, рассмотрел logback для новой разработки, но существующий log4j достаточно хорош и созрел для всего, что уже было выпущено и встретило конечного пользователя. Это очень субъективно, вы должны сами оценить стоимость.

33

В мире протоколирования есть Facades (например, Apache Commons Logging, slf4j или даже API Log4j 2.0) и реализации (Log4j 1 + 2, java.util.logging, TinyLog, Logback).

В принципе, вы должны заменить свою самодельную упаковку на slf4j IF и только в том случае, если вы почему-то недовольны ею. Хотя Apache Commons Logging на самом деле не предоставляет современный API, slf4j и новый фасад Log4j 2 обеспечивают это. Учитывая, что довольно много приложений используют slf4j в качестве обертки, имеет смысл использовать это.

SLF4J дает ряд хороший API сахара, как в этом примере из SLF4J документы:

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

Это подстановка переменной. Это также поддерживается Log4j 2.

Однако вы должны знать, что slf4j разработан QOS, который также поддерживает логин. Log4j 2.0 запекается в Apache Software Foundation. За последние три года оживленное и активное сообщество снова выросло. Если вы оцениваете Open Source, как это делает Apache Software Foundation со всеми его гарантиями, вы можете пересмотреть использование 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 и zero с помощью 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. С другой стороны, если вам нужно вести журнал аудита и нуждаться в высокой производительности, предоставляемой асинхронными приложениями, это имеет большое значение для check log4j 2.

Обратите внимание, что несмотря на все удобства, которые они обеспечивают, фасады всегда едят небольшую производительность. Возможно, это совсем не влияет на вас, но если вы находитесь на низких ресурсах, вам может понадобиться сохранить все, что у вас есть.

Не зная, какие требования лучше, почти невозможно дать рекомендацию. Просто: не переключайтесь, потому что много людей переключаются. Переключайте только потому, что вы видите его значение. И аргументация, что log4j мертва, больше не учитывается. Это живое, и жарко.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: В настоящее время я являюсь вице-президентом, службами регистрации Apache и участвует в log4j.