2008-10-07 2 views
76

Должны ли новые проекты использовать logback вместо log4j в качестве рамки ведения журнала?Должны ли новые проекты использовать logback вместо log4j?

Или другими словами: «Является ли logback лучше, чем log4j (оставляя SLF4J-'feature» logback рядом)? '

+0

Не могли бы вы объяснить, почему этот вопрос был закрыт? – 2011-11-23 21:42:40

+13

Этот вопрос полезен для меня, голосование возобновляется. – 2012-07-24 16:25:52

+3

Насколько это «слишком локализовано»? Огромное количество java-проектов использует log4j. Вопрос о том, следует ли считать его «устаревшим» в пользу нового журнала (авторы которого считают, что он осуждает log4j), имеет отношение к большому количеству людей и будет продолжаться в течение некоторого времени. – EricS 2012-08-21 16:46:53

ответ

-3

Я не знаком с SLF4J, и я только немного взглянул на журнал, но на ум приходят две вещи.

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

Во-вторых, я думаю, что в некоторых проектах один инструмент лучше, чем другой инструмент, а наоборот может быть правдой в другом проекте. Я не думаю, что один инструмент всегда лучше, чем другой инструмент. Существует, в конце концов, нет серебряной пули.

Чтобы ответить на ваш вопрос - Да и нет. Это зависит от проекта и насколько знакомы команды с одним инструментом. Я бы не сказал «не используйте log4j», если вся команда очень им удобна, она удовлетворяет всем потребностям, а logback не предлагает ничего, что нам нужно для выполнения задачи.

1

оригинальные log4j и logback были разработаны и реализованы одним и тем же парнем.

несколько инструментов с открытым исходным кодом использовали SLF4J. Я не вижу существенных недостатков в этом инструменте. Поэтому, если у вас нет много расширений для log4j в вашей кодовой базе, я бы продолжил логин.

1

Я бы подумал, что ваше решение должно совпадать с тем, что было бы, если бы вы решали между использованием log4j или Jakarta Commons Logging - вы разрабатываете библиотеку, которая будет включена в другие приложения? Если это так, то не кажется справедливым заставить пользователей вашей библиотеки также использовать выбранную вами библиотеку журналов.

Если ответ отрицательный, я бы просто пошел с тем, что проще добавить и с чем вам удобнее. Звучит так же, как и журнал, столь же расширяемый и надежный, как log4j, поэтому, если вам удобно его использовать, продолжайте.

10

Я бы использовал slf4j для регистрации во всех случаях. Это позволяет вам выбрать, какой фактический бэкэнд вы хотите использовать, во время развертывания вместо времени кода.

Это оказалось для меня очень ценным. Это позволяет мне использовать log4j в старых JVM и logback в 1.5+ JVM, а также java.util.logging, если это необходимо.

81

Вы должны использовать SLF4J + Logback для регистрации.

Он обеспечивает опрятные функции, такие как параметризованные сообщения и (в отличие от общедоступных записей). Диагностический контекст (MDC, javadoc, documentation).

Использование SLF4J делает бэкэнд регистрации взаимозаменяемым довольно элегантным способом.

Кроме того, SLF4J supports bridging других фреймворков протоколирования для реальной реализации SLF4J вы будете использовать, так что события регистрации из стороннего программного обеспечения будут отображаться в ваших унифицированных журналах - за исключением java.util.logging, которые не могут быть соединены таким же образом, что и другие рамки ведения журнала.

Мостовой переход объясняется в javadocs от SLF4JBridgeHandler.

У меня был очень хороший опыт использования комбинации SLF4J + Logback в нескольких проектах, и разработка LOG4J в значительной степени зашла в тупик.

SLF4J имеет следующие оставшиеся недостатки:

  • Он не поддерживает, чтобы остаться с переменным числом аргументов совместим с Java < 1,5
  • Он не поддерживает использование как параметризованную сообщение и исключение в то же время.
  • Он не содержит поддержки вложенного диагностического контекста (NDC, javadoc), который имеет LOG4J.
2

Logback более Java EE известно:
в целом (от кода документации), это имея в виду контейнеры - как несколько приложений сосуществуют, как загрузчики классов реализованы и т.д. контексты для лесорубов, JNDI, конфигурация JMX включены и т.д.

от разработчика перспективного почти такие же, Logback добавляет параметризованной каротаж (нет необходимости в использовании, если (logger.isDebugEnabled()), чтобы избежать конкатенаций служебной строки)

Log4j - только гигантской плюс старая поддержки виртуальной машины Java, маленькие (ИМО) НДЦ (Logba ck только MDC), некоторые расширения. Например, я написал расширение для configureAndWatch для Log4j, нет такой вещи для журнала.

20

У автора (как Logback, так и Log4j) есть список причин для изменения на http://logback.qos.ch/reasonsToSwitch.html.

Вот несколько, которые торчали у меня;

  • Faster реализация

    Основываясь на нашей предыдущей работы по log4j, Logback Внутренности были переписан для выполнения примерно в десять раз быстрее по некоторым критическим выполнения путей. Не только отстают компоненты журнала , они также имеют меньший объем памяти, равный .

  • Автоматическая перезарядка конфигурации файлов

    Logback-классика может автоматически перезагрузить свой конфигурационный файл на модификации. Процесс сканирования - - быстрый и безопасный, так как он не связан с созданием отдельной развертки для сканирования. Эта техническая тонкость гарантирует, что logback играет хорошо в пределах серверов приложений и в целом в среде JEE .

  • Стек следы с упаковки данных

    Когда Logback печатает исключение, трассировки стека будет включать в себя упаковку данных.Вот примерная трассировка стека , созданная с помощью logback-demo веб-приложения.

    14: 28: 48,835 [btpool0-7] INFO cqldemo.prime.PrimeAction - 99 не является допустимым значением java.lang.Exception: 99 недействительна
    на ch.qos.logback. demo.prime.PrimeAction.execute (PrimeAction.java:28) [classes /: na] at org.apache.struts.action.RequestProcessor.processActionPerform (RequestProcessor.java:431) [struts-1.2.9.jar : 1.2.9] на org.apache.struts.action.RequestProcessor.process (RequestProcessor.java:236) [struts-1.2.9.jar: 1.2.9] на org.apache.struts.action.ActionServlet .doPost (ActionServlet.java:43 2) [struts-1.2.9.jar: 1.2.9] на javax.servlet.http.HttpServlet.service (HttpServlet.java:820) [servlet-api-2.5-6.1.12.jar: 6.1. 12]
    на org.mortbay.jetty.servlet.ServletHolder.handle (ServletHolder.java:502) [причал-6.1.12.jar: 6.1.12] на ch.qos.logback.demo.UserServletFilter. doFilter (UserServletFilter.java:44) [classes /: na] в org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1115) [jetty-6.1.12.jar: 6.1.12 ] на org.mortbay.jetty.servlet.ServletHandler.handle (ServletHandler.java:361) [jetty-6.1.12.jar: 6.1.12] на org.mortbay.je tty.webapp.WebAppContext.handle (WebAppContext.java:417) [jetty-6.1.12.jar: 6.1.12] в org.mortbay.jetty.handler.ContextHandlerCollection.handle (ContextHandlerCollection.java:230) [ причал-6.1.12.jar: 6.1.12]

    Исходя из вышеизложенного, можно признать , что приложение использует Struts версии 1.2.9 и была развернута под молы версии 6.1.12. Таким образом, трассировки стека быстро сообщают читателю о классах, выполняемых в исключении , а также о пакете и версиях пакетов, к которым они принадлежат. Когда ваши клиенты отправят вам стек трассировать, в качестве разработчика вам не будет , то вам больше нужно попросить их отправить вам информацию о версиях пакетов, которые они используют. Информация будет частью стека след. См. «% XThrowable» конверсия слово для деталей.

    Эта функция может быть весьма полезной для . То, что некоторые пользователи ошибочно принимают , считают это особенностью их IDE.

  • Автоматическое удаление старых журнальных архивов

    Установив maxHistory свойство TimeBasedRollingPolicy или SizeAndTimeBasedFNATP, вы можете контролировать максимальное количество архивных файлов. Если ваша прокатка политика предусматривает ежемесячное опрокидывание и вы хотите сохранить ценность за один год бревен, просто установите свойство maxHistory до 12. архивированных файлов журнал старше 12 месяцев будут автоматически удаляется.

Там может быть уклон, но тот же самый парень сделал писать обе рамки, и если он говорит, использование Logback над Log4j он, вероятно, стоит слушать.

Смежные вопросы