2015-09-08 3 views
0

У меня есть приложение с несколькими классами, каждый из которых имеет собственный регистратор (Logger log = Logger.getLogger(this.class)). Каждый класс имеет методы, которые необходимо регистрировать.Как определить глобальный регистратор для всего приложения?

Есть ли способ определить регистратор (вместо этого this.class), чтобы все классы вошли в один файл (один файл)?

Было бы здорово, если это может быть сделано с помощью опции VM, как -Dlog4j.configuration=...

ответ

3

Тот факт, что у вас есть отдельный экземпляр Logger для каждого файла не означает, что они получают вход в другой файл , На самом деле, они обычно не являются. Единственная цель дать класс как аргумент метода getLogger() - дать ему имя (в этом случае имя вашего класса со всеми пакетами).

Название преследует две цели: во-первых, он может быть зарегистрирован в ваших сообщениях как это:

[main] INFO MyApp - Entering application. 
[main] DEBUG com.foo.Bar - Did it again! 
[main] INFO MyApp - Exiting application. 

Во-вторых, вы можете использовать его для более мелкозернистой конфигурации log4j:

# Print only messages of level WARN or above in the package com.foo. 
log4j.logger.com.foo=WARN 

файл, где написаны журналы можно управлять в конфигурации, например, так:

log4j.rootLogger=myfile 
log4j.appender.myfile=org.apache.log4j.RollingFileAppender 
log4j.appender.myfile.File=example.log 

Вы можете просто прочитать manual для получения дополнительной информации.


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

Смежные вопросы