Регистрация с использованием SL4J, регистрация Jakarta Commons, log4j для сторонних библиотек и мой собственный код - PullRequest
23 голосов
/ 20 января 2009

У меня есть несколько вопросов о ведении журнала, более конкретно о настройке и проверке его работоспособности.

В проекте, который я делаю, будут использоваться Wicket , Spring и Hibernate . Я знаю, что Wicket и Hibernate используют Simple Logging Facade для Java ( SL4J ), а Spring использует компонент ведения журнала из Apache Commons .

Будут ли они сосуществовать счастливо? Я думал, что буду использовать log4j вместе с SL4J и компонентом журналирования из Apache Commons, как вы думаете, это хорошая идея?

Могу ли я настроить их все для вывода данных регистрации в общий файл? Или я должен использовать отдельные файлы? Или я должен хранить сообщения регистрации в базе данных? (Я бы предпочел этого не делать, так как мне кажется, что текстовые файлы выглядят очень удобно.)

Для Spring, мне кажется, мне нужен какой-то файл конфигурации для компонента ведения журнала Apache Commons, куда я указываю использовать log4j?

Когда я настроил их, я думаю, чтобы увидеть, что все работает, я установил уровень ведения журнала на INFO, так как вполне уверен, что все три фреймворка выводят некоторую информацию в этом режиме? Или есть еще лучший способ убедиться?

И мой последний вопрос. В проекте, который я начинаю, вы рекомендуете использовать SL4J для своих целей? (Я думал, что буду использовать log4j напрямую, но это было до того, как я узнал немного больше о журналировании, и многие респектабельные библиотеки, кажется, выбирают путь моста / фасада для своих нужд журналирования. И если это дает нам гибкость без добавления стоимость нет причин не делать это таким образом.)

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

Ответы [ 2 ]

20 голосов
/ 20 января 2009

Ну, SLF4J - это просто фасад, похожий на лесозаготовки, что означает, что им все еще нужно что-то еще для работы. Они позволяют авторам библиотеки не заставлять пользователей иметь несколько библиотек журналов и конфигурации. Log4j и logback являются обычными библиотеками.

См. здесь для получения дополнительной информации.

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

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

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

  • jcl104-over-slf4j.jar (чтобы соединить протоколирование общего достояния Джакарты с slf4j)
  • slf4j.jar (для спящего режима и других использовать slf4j)
  • slf4j-logj12.jar (для slf4j использовать log4j в качестве бэкэнда)
  • log4j.jar (для использования вашим приложением. Здесь также будет выполнена вся конфигурация)
13 голосов
/ 20 января 2009

Вот как все перенаправить на SLF4J:

  • удалите commons-logging.jar из вашего пути к классам. Если вы используете Maven и у вас возникли проблемы с удалением общего журнала, см. this .

  • поместите jcl-over-slf4j.jar в ваш путь к классам (он входит в дистрибутив SLF4J). Это вставная замена, которая имитирует классы JCL, но вызывает SLF4J внутри. Это позаботится о Spring и любой другой платформе, которая использует JCL.

Подключите SLF4J к вашему любимому бэкэнду (Log4J, Logback ...), указав slf4j-xxx.jar в пути к классам. Сконфигурируйте бэкэнд для регистрации всех категорий в одном файле, и все готово.

Что касается использования SLF4J в вашем приложении, это не является строго обязательным. Такие библиотеки, как JCL и SLF4J, изначально были предназначены для людей, которые пишут библиотеки и не хотят привязывать своих клиентов к определенной среде ведения журналов.

PS: кстати, JCL = Jakarta Commons Logging

...