Log4j vs logback

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

Должны ли мы обновить logback?

(Я имею в виду рамки, а не фасад, такой как SLF4J)

Ответ 1

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

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

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

Ответ 2

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

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

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

Это безболезненно? Возможно, но это может зависеть от ваших протоколирующих операторов.

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

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

Ответ 3

В мире протоколирования есть 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 docs:

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 не поддерживался активно во время выполнения протокола. Но сегодня все по-другому. 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. С другой стороны, если вам нужно вести журнал аудита и нуждаться в высокой производительности, предоставляемой асинхронными приложениями, это имеет большое значение для проверьте log4j 2.

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

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

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: В настоящее время я являюсь VP, Apache Logging Services и участвует в log4j.

Ответ 4

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

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

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

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

Ответ 5

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

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

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

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

Ответ 6

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