Вопрос

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

  • Журналирование Java
  • Регистрация в сообществе
  • Лог4дж
  • SLF4j
  • Вход в систему
Это было полезно?

Решение

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

  • Log4j, потому что большинство его используют (по моему опыту)
  • Commons Logging, поскольку его используют проекты с открытым исходным кодом (поэтому они могут интегрироваться с любой структурой журналирования, используемой в интегрированном решении);особенно актуально, если вы используете API/Framework/OSS и полагаетесь на другие пакеты, использующие ведение журнала Commons.
  • 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, поэтому он сделал его лучше (согласно Кен Джи - Спасибо.Кажется, подходит, если посмотреть их предыдущие новостные сообщения)
  • SLF4j, потому что они также публикуют адаптер log4j, поэтому вам не нужно «отключать» log4j в старом коде — просто заставьте log4j.properties использовать SLF4j и его конфигурацию.

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

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

Ранние версии Java не имели встроенной системы ведения журналов, что приводило к такому сценарию.

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

SLF4J (а также Logback и LOG4J в качестве механизма регистрации) поддерживают так называемый сопоставленный диагностический контекст (MDC, см. Javadoc и документация).

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

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

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

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

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

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

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

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

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

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

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

Обычно я бы по умолчанию использовал Log4J.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top