2013-08-23 3 views
1

Моя конфигурация log4j следующим образомlog4j ошибка уровня конфигурации

log4j.rootLogger=INFO, CA, FA, DA 

#Console Appender 
log4j.appender.CA=org.apache.log4j.ConsoleAppender 
log4j.appender.CA.layout=org.apache.log4j.PatternLayout 
log4j.appender.CA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n 

#File Appender 
log4j.appender.FA=org.apache.log4j.FileAppender 
log4j.appender.FA.File=/home/admin/logs/sysout.log 
log4j.appender.FA.layout=org.apache.log4j.PatternLayout 
log4j.appender.FA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n 
log4j.appender.FA.Threshold = WARN 



#File Appender 2 
log4j.appender.DA=org.apache.log4j.FileAppender 
log4j.appender.DA.File=/home/admin/logs/debug.log 
log4j.appender.DA.layout=org.apache.log4j.PatternLayout 
log4j.appender.DA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n 
log4j.appender.DA.Threshold = TRACE 

Мой understading является

  1. INFO будет записан в консоль
  2. WARN будут регистрироваться sysout.log
  3. СЛЕД будет зарегистрирован на debug.log

Но WARN регистрируется как debug.log, так и sysout.log. Также TRACE не регистрируется в любом из файлов.

Консоль имеет TRACE и WARN оба.

Можете ли вы сказать мне, что я делаю неправильно

ответ

1

Вы должны отделить регистратора и Appender понятия в вашем уме.

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

CA не имеет установленного порогового значения, поэтому он будет регистрировать все сообщения, отправленные ему независимо от уровня. Аналогично, DA имеет порог TRACE, поэтому он также регистрирует все, что ему отправлено (поскольку TRACE является самым низким уровнем). FA имеет порог WARN, поэтому он будет фильтровать любые сообщения на уровнях ниже WARN - он будет содержать только сообщения WARN, ERROR и FATAL.

Важной частью этого предыдущего абзаца является «все сообщения , которые отправляются ему». Поскольку вы настроили свой корневой регистратор с уровнем INFO и не настроили какие-либо конкретные регистраторы на более низкий уровень, только сообщения в INFO и выше будут отправлены в приложения - сообщения DEBUG и TRACE будут отключены. Вот почему вы не видите выход TRACE в любом из ваших регистраторов.

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