Java: sl4j как войти в систему для всех классов? - PullRequest
3 голосов
/ 26 ноября 2011

возможно ли вести журнал для всех классов, в один файл вместо

final Logger logger = LoggerFactory.getLogger(Wombat.class);

что вам нужно для входа всех классов?

Ответы [ 2 ]

10 голосов
/ 26 ноября 2011

Краткий ответ ...

Используемое в коде Logger не говорит, где выводятся сообщения регистрации. (Чторешает, куда будут отправляться сообщения, - используемую привязку и конфигурацию.)

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

Если вы хотите вывести все сообщения регистрации в один файл, опцияЯ бы предложил использовать привязку log4j вместе со вторым примером log4j.properties, который я привел ниже.По большей части вы должны иметь возможность скопировать / вставить это, чтобы запустить, а затем настроить на досуге.

Длинный ответ ...

Покрытие SLF4J и некоторые его привязки.

SLF4J

С веб-сайта http://www.slf4j.org/

Простой фасад ведения журнала для Java или (SLF4J) служит простым фасадом или абстракцией для различных каркасов ведения журнала,например, java.util.logging, log4j и logback, позволяющие конечному пользователю подключить необходимую инфраструктуру ведения журналов во время развертывания.

Так что все зависит от того, какую привязку вы используете! На самом деле идея заключается в том, что вам даже не нужно останавливаться на привязке до времени выполнения, и вам не нужно менять какой-либо код регистрации, чтобы потом передумать!

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

Простое связывание

Простая привязка (например, slfj-simple-1.6.4.jar) не имеет конфигурации.

Она просто записывает все сообщения INFO и выше в стандартный вывод ошибок (System.err).

Привязка Log4j

Как правило, хотя вы хотите использовать более сложную привязку, такую ​​как log4j (именно об этом я и буду говорить).Это гораздо более гибко, чем простое связывание, но требует, чтобы вы выполнили некоторую настройку.

Сначала вам потребуется другой jar для связывания (например, slf4j-log4j12-1.6.4.jar).Вам также понадобится соответствующий jar log4j (например, log4j-1.2.16).И, наконец, вам нужно настроить сам log4j - файл log4j.properties, который будет расположен в корне проекта.

Я перейду к паре примеров файлов log4j.properties


Этот первый выводит все на консоль и очень похож на то, что достигается простым связыванием, за исключением того, что вы можете настроить уровень (TRACE, DEBUG, WARN, INFO, ERROR), на котором вы регистрируетесь, и шаблон вывода.

# Root Logger : TRACE & above to console appender
log4j.rootLogger=TRACE, console
# Appender : Console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-8r %-5p %c [%t] %m%n

Для вывода в один файл вам понадобится другой аппендер, например:

# Root Logger : WARN & above to mainFile appender
log4j.rootLogger=WARN,mainFile
# Appender : mainFile
log4j.appender.mainFile=org.apache.log4j.FileAppender
log4j.appender.mainFile.File=main.log
log4j.appender.mainFile.layout=org.apache.log4j.PatternLayout
log4j.appender.mainFile.layout.ConversionPattern=%-8r %-5p %c [%t] %m%n

Log4j настроен вокруг концепции регистраторов иappenders.

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

Добавляющие определяют способ вывода сообщений (например, файл, сеть, консоль, база данных) и их формат.

1 голос
/ 26 ноября 2011

Вы можете использовать именованный регистратор:

final Logger logger = LoggerFactory.getLogger("MyLogger");

Вот ссылка на документы .

...