Ведение журнала с использованием протоколов 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 напрямую, но это было до того, как я узнал немного больше о протоколировании, и многие респектабельные библиотеки, похоже, выбирают путь моста/фасада для своих нужд ведения журнала. И если он получит гибкость без добавления стоить там нет причин не делать этого таким образом.)
Я с нетерпением жду услышать от вас больше о том, как вы ведете журнал. Это новая область для меня, которую я очень хочу улучшить.
Ответы
Ответ 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