Что случилось с Logging в Java?

голоса
113

Почему один будет использовать один из следующих пакетов вместо другого?

  • Java Logging
  • Commons Logging
  • Log4j
  • SLF4J
  • Logback
Задан 10/12/2008 в 02:27
источник пользователем
На других языках...                            


8 ответов

голоса
85

В хронологическом порядке апи Apperance (насколько я знаю):

  • Log4j, потому что почти каждый использует его (по моему опыту)
  • Commons Logging, поскольку проекты с открытым исходным кодом использовать его (таким образом они могут интегрироваться с любым протоколированием рамки используются в комплексном решении); особенно справедливо, если вы являетесь API / Framework / OSS и вы полагаться на другие пакеты, которые используют Commons Logging.
  • Commons Logging, потому что вы не хотите, чтобы «запереть» в определенной среде журналирования (так вместо того, чтобы вы блокируете вниз к тому, что Commons Logging дает вам, а) - я не думаю, что это имеет смысл, чтобы решить, используя эту точку в качестве причины.
  • Java регистрации, потому что вы не хотите, чтобы добавить в дополнительной банке.
  • SLF4J потому что новее Commons Logging и обеспечивает параметризированное ведение журнала:

logger.debug("The entry is {}.", entry);
//which expands effectively to
if (logger.isDebugEnabled()){
    // Note that it's actually *more* efficient than this - see Huxi's comment below...
    logger.debug("The entry is " + entry + "."); 
}
  • Logback, потому что это более новая, чем log4j и снова, поддерживает параметризированную регистрацию, так как она реализует SLF4J напрямую
  • SLF4J / Logback , потому что она написана одним и тем же парнем , который сделал log4j, так что он сделал это лучше ( в соответствии с Кен G -. Спасибо кажется, подходит , если смотреть на своих прежних постах новостей )
  • SLF4J, потому что они также публиковать адаптер log4j, так что вы не должны «переключаться из» log4j в старом коде - просто сделать log4j.properties использовать SLF4J и его конфигурация
Ответил 10/12/2008 в 02:50
источник пользователем

голоса
33

Я считаю , войдя в Java , чтобы сбить с толку, непоследовательны, плохо документированы, и особенно бессистемно. Кроме того, существует огромное количество сходства между этими лесозаготовительными структурами приводят к дублированию усилий, и путаница в какую среду лесозаготовительных вы на самом деле. В частности, если вы работаете в серьезных стек Java веб - приложениях, вы часто в множественныйвходе среды в одно время; (Например, спящий режим может использовать log4j, и кот java.util.logging). Apache Commons призвана устранить различные рамки протоколирования, но на самом деле только добавляет сложности. Если вы не знаете, это загодя, это совершенно изумительное. Почему мои сообщения журнала не печатает на консоль и т.д.? Оу, потому что я смотрю на бревнах Tomcat, а не log4j. Добавление еще один уровень сложности, сервер приложений может иметь глобальные конфигурации каротажа, которые не могут распознавать локальные конфигурации для конкретного веб-приложения. И наконец, все эти лесозаготовки рамки являются слишком сложно. Вход в Java был неорганизованный беспорядок оставив разработчиков, как я расстроен и смущен.

Ранние версии Java не имеют встроенную базу протоколирования, ведущую к этому сценарию.

Ответил 11/03/2009 в 22:26
источник пользователем

голоса
22

Там один важный момент, который не был упомянут раньше:

SLF4J (и оба Logback и LOG4J как лесозаготовительный бэкэнд) имеют поддержку так называемой Mapped диагностики контекста (MDC см Javadoc и документацию ).

Это, по существу, поток локальной Map <String, String>, которые вы можете использовать, чтобы добавить дополнительную контекстную информацию для вашего события регистрации. Текущее состояние ДДП прилагается к каждому событию.

Это может быть очень полезным, если вы положили вещи, как имя пользователя и URL запроса (в случае веб-приложение) в него. Это может быть сделано автоматически с помощью фильтра, например.

Ответил 03/06/2009 в 05:01
источник пользователем

голоса
17

Смотрите также ответы на вопрос Каковы лучшие практики в журнале ошибок? , особенно:

  • Есть некоторые потенциальные проблемы с загрузкой классов Commons Logging.

  • Log4J и SLF4J были разработаны одним и тем же человеком, учась проблем, обнаруженных на практике с Log4J.

Ответил 10/12/2008 в 14:30
источник пользователем

голоса
4

В Commons Logging обзора дает основание для своего существования: вход из библиотеки коды, когда вы не имеете никакого контроля над подстилающей основой ведения журнала. Очень важно для различных Apache проектов, которые будут связаны во внешние приложения. Может быть , не так важны для внутренних ИТ - проектов, где у вас есть полный контроль.

Тем не менее, я пишу Commons Logging, как и многие другие разработчики, которых я знаю. Причина заключается в том, чтобы свести к минимуму умственную багаж: Вы можете изменить проекты или работы, а также не должны изучить новые рамки (при условии, новая работа / проект также использует CL, и / или вы можете убедить их перейти к нему).

Кроме того , существует некоторое значение , чтобы создавать свои собственные обертки вокруг любой основы вы используете. Как описано здесь , я хотел бы использовать объект LogWrapper для обеспечения пользовательского stringification (важно), и свести к минимуму визуального беспорядка операторов лесозаготовительных (менее важно).

Ответил 11/12/2008 в 14:48
источник пользователем

голоса
4

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

Все свойства LOG4J вы можете изменить в файле log4j.properties, так что вы можете использовать различные файлы для различных проектов.

протоколирование Java это не мой Favorit, но это может быть потому, что я использую log4j с самого начала.

Ответил 10/12/2008 в 08:15
источник пользователем

голоса
2

Вообще, я бы по умолчанию использовать Log4J.

Я хотел бы использовать Java Logging, если я не возражаю зависимость от Java 1.4, но я по-прежнему использовать Log4J предпочтение.

Я хотел бы использовать Commons Logging, если я повышения то, что уже использовал его.

Ответил 10/12/2008 в 05:00
источник пользователем

голоса
0

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

Ответил 10/12/2008 в 05:02
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more