Настройка нескольких файлов журнала в log4j при использовании категорий - PullRequest
3 голосов
/ 12 января 2010

Вот что я пытаюсь сделать: я хочу 2 файла журнала: первый регистрирует уровень INFO и выше для всех частей приложений, но также регистрирует DEBUG и некоторые пакеты. Второй только регистрирует ОШИБКУ и все пакеты. Я уверен, что это, вероятно, тривиально, но я не могу понять это. Вот файл конфигурации, который я сейчас использую:

log4j.rootLogger=INFO,console,R

#console appender
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = %t %-5p %c{2} - %m%n

#file appender
log4j.appender.R = org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.DatePattern = '.'yyyy-MM-dd
log4j.appender.R.File = log/log.txt
log4j.appender.R.layout = org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern = [%d{ISO8601}]%5p%6.6r[%t]%x(%F:%L) - %m%n

#Specific log levels
log4j.category.com.mypackage1=DEBUG
log4j.category.com.mypackage2=DEBUG

Очевидно, здесь нет части журнала ошибок. Моя основная идея состояла в том, чтобы добавить еще одного аппендера и установить для его уровня журнала значение ERROR, но категории, кажется, переопределяют его, а также их информацию, что не является тем, что я хочу. Их причина в том, что другие пакеты сбрасывают много информации, которая нам не нужна, когда мы настроены на отладку, и именно так мы ее обходим. Я думаю, что может быть лучший общий подход к этому, но это мой первый когда-либо файл конфигурации log4j.

ОБНОВЛЕНИЕ: Сотрудник предложил использовать 2 регистратора, как упомянуто в посте, на который kdgregory ссылается в своем комментарии ( Различный макет log4j для отладки и ошибок? ). Люди там, казалось, думали, что это плохая идея, но никто никогда не объяснял почему. Это кажется немного хакерским, но делает то, что нам нужно. Каковы основные причины не использовать этот метод (кроме необходимости поддерживать 2 разных регистратора)?

1 Ответ

9 голосов
/ 13 января 2010

Вот то, что я в конце концов придумал, что сделало трюк:

log4j.rootLogger=INFO,console,stdLog,errorLog

#console appender
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = %t %-5p %c{2} - %m%n

#file appender
log4j.appender.stdLog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.stdLog.DatePattern = '.'yyyy-MM-dd
log4j.appender.stdLog.File = log/log.txt
log4j.appender.stdLog.layout = org.apache.log4j.PatternLayout
log4j.appender.stdLog.layout.ConversionPattern = [%d{ISO8601}]%5p%6.6r[%t]%x(%F:%L) - %m%n

#file appender
log4j.appender.errorLog = org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorLog.DatePattern = '.'yyyy-MM-dd
log4j.appender.errorLog.File = log/errorlog.txt
log4j.appender.errorLog.layout = org.apache.log4j.PatternLayout
log4j.appender.errorLog.layout.ConversionPattern = [%d{ISO8601}]%5p%6.6r[%t]%x(%F:%L) - %m%n
log4j.appender.errorLog.Threshold=ERROR

#Specific log levels
log4j.category.com.mypackage1=DEBUG
log4j.category.com.mypackage2=DEBUG

Это составляет 2 журнала, один из которых регистрирует все в Warn или выше, плюс в DEBUG или выше в указанных пакетах для стандартного журнала и в ERROR и выше только для всех пакетов в журнале ошибок.

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