Log4j против logback

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

Стоит ли обновляться до логбэка?

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

logback звучит очень похоже на ведение журнала jakarta commons - каковы основные отличия?

matt b 07.10.2008 16:52

SLF4J (который является фасадом) звучит похоже на commons.logging. Основное отличие состоит в том, что SLF4J использует статическую привязку, в то время как commons.logging использует некоторую стратегию разрешения. Logback («родная» (т.е. без дополнительного слоя оболочки) реализация фасада) сравнима с LOG4J, но имеет более богатый API.

Huxi 03.06.2009 08:11

SLF4J - это фасадный фреймворк, который упрощает переключение с одного фреймворка на другой Сравнение Checkout между всеми фреймворками здесь

Shubham Srivastava 04.10.2020 08:02
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
154
3
108 360
6

Ответы 6

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

SLF4J suffers from none of the class loader problems or memory leaks observed with Jakarta Commons Logging (JCL).

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

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

Я знаю SLF4J. Но каркас сруба просил не для фасада!

Kev 07.10.2008 18:12

Извинения. Я предлагал, чтобы если вы использовали SLF4J вместо своего собственного фасада, то переключение с log4j на logback было бы менее болезненным?

toolkit 07.10.2008 20:12

Каков источник этой цитаты? Ведение журнала Commons - это проверенный и проверенный компонент. У меня никогда не было утечек памяти с ним.

Kshitiz Sharma 26.04.2013 14:34

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

toolkit 27.04.2013 02:59

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

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

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

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

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

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

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

Это редкая возможность поговорить с разработчиком столь популярного программного обеспечения. Спасибо Ceki за log4j.

Srujan Kumar Gulla 31.05.2013 21:19

Отказ от ответственности: этот парень является первоначальным разработчиком всех Log4j, SLF4J и Logback. Но больше не работает с Log4j.

Victor Stafusa 29.08.2016 21:26

Тебе следует? да.

Почему? Log4J по существу устарел Логбэк.

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

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

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

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

Примечание. Проект log4j не считает log4j устаревшим.

Thorbjørn Ravn Andersen 10.10.2011 11:59

Следует уточнить терминологию; однозначно, автор проекта log4j считает войти в систему, чтобы стать преемником log4j. Это один и тот же автор обоих проектов, поэтому его мнение должно иметь определенный вес; сам «проект log4j» ничего не «учитывает». У нынешней группы людей, связанных с log4j, разные мнения (некоторые действительно согласны, некоторые, что неудивительно, не согласны). Имея за плечами немного больше истории (через 3 года после первоначального комментария), SLF4J + Logback продолжает укреплять свои позиции по сравнению с Log4j.

michael 04.02.2013 09:29

@michael_n Обратите внимание, что Log4j 1 был написан НЕ одним человеком. Неправильно говорить «один и тот же автор». Цеки - важный автор, без сомнения, но не единственный. Фактически, многие люди помогли сделать Log4j 1 тем, чем он является.

Christian 16.07.2014 12:55

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

michael 17.07.2014 01:14

Итак, зачем вам всем бороться за ту или иную библиотеку логирования? Почему мы пытаемся убивать / продвигать библиотеки? По крайней мере, приведите рациональные аргументы, ПОЧЕМУ один лучше другого. Боже, переполнение стека - это беспорядок.

User 07.09.2016 21:12

Согласен, Маниус. На stackoverflow.com/questions/178836/… есть гораздо более аргументированное обсуждение

Breandán Dalton 17.07.2017 16:40

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

В мире журналирования есть фасады (например, Apache Commons Logging, slf4j или даже Log4j 2.0 API) и их реализации (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 и ноль с Logback. Это привело к некоторым улучшениям, например, в примере Log4j 2 под капотом работает с байтовыми потоками вместо строк. Также он не теряет события при перенастройке.

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 мертв, больше не в счет. Он живой и горячий.

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

Другие вопросы по теме