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

Ведение журнала с использованием протоколов SL4J, Jakarta Commons, log4j для сторонних библиотек и моего собственного кода

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

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

Подробнее см. здесь.

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

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

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

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

Ответ 2

Вот как перенаправить все на 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