log4j направляет весь вывод журнала на стандартный вывод, даже если он не должен - PullRequest
9 голосов
/ 07 августа 2009

В моем log4j.properties у меня есть:

log4j.rootLogger=DEBUG,stdout

log4j.logger.notRootLogger=DEBUG,somewhereelse

Параметры appdders stdout иwhereelse настроены надлежащим образом, stdout выполняет запись в консоль и где-то еще запись в файл.

В своем коде в каждом классе я либо задаю:

static Logger log =  Logger.getLogger("notRootLogger);

^ Когда я не хочу, чтобы что-то шло на консоль.

1011 * -ИЛИ- *

static Logger log = Logger.getRootLogger();

^ Когда я это сделаю.

Что я должен сделать в log4.properties, чтобы остановить запись того, что записано в notRootLogger, в итоге в stdout? Есть ли какое-то наследование того, куда пишет ведущий логгер, что нужно как-то отключить?

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

Ответы [ 3 ]

24 голосов
/ 07 августа 2009

Вам необходимо установить additivity = false, IIRC. Из руководства log4j :

Каждый включенный запрос регистрации для данный логгер будет перенаправлен всем приложение в этом логгере как наложенные выше в иерархия. Другими словами, appenders наследуются аддитивно от иерархия логгеров. Например, если консольный аппендер добавлен в корень логгер, тогда все включено логирование запросы будут по крайней мере печатать на приставка. Если в дополнение файл appender добавлен в логгер, скажем C, затем включил регистрацию запросов для C и дети C будут печатать на файле и на консоли. Можно переопределить это поведение по умолчанию, чтобы накопление аппендера больше не аддитив, установив аддитивность флаг в ложь.

Попробуйте это:

log4j.rootLogger=DEBUG,stdout
log4j.logger.notRootLogger=DEBUG,somewhereelse
log4j.additivity.notRootLogger=false
0 голосов
/ 28 ноября 2014

Если свойства logger были определены в классе java, вы можете вызвать метод logger.shutdown () в конце, предпочтительно в блоке finally, чтобы запретить аддитивную природу регистратора.

0 голосов
/ 07 августа 2009

Хмм, следовало бы прочитать короткое вступление к log4j более внимательно

log4j.additivity.notRootLogger=false

исправляет это, потому что он наследует appenders от регистраторов над ним в иерархии, и корневой регистратор находится на вершине иерархии, очевидно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...