Настройка нескольких файлов журнала в log4j при использовании категорий

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

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 разных регистратора)?


person Ryan Elkins    schedule 12.01.2010    source источник
comment
Этот вопрос может вам помочь (не уверен, что он может считаться точным дубликатом): stackoverflow.com/questions/1008122/   -  person kdgregory    schedule 12.01.2010


Ответы (1)


Вот что я в итоге сделал:

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 и выше только для всех пакетов в журнал ошибок.

person Ryan Elkins    schedule 13.01.2010