Подтвердить что ты не робот

Что происходит с записью на Java?

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

  • Запись в Java
  • Запись в Commons
  • Log4j
  • SLF4J
  • Logback
4b9b3361

Ответ 1

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

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

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

Ответ 2

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

В ранних версиях Java не было встроенной среды ведения журнала, приводящей к этому сценарию.

Ответ 3

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

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

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

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

Ответ 4

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

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

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

Ответ 5

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

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

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

Ответ 6

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

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

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

Ответ 7

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

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

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

Ответ 8

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