@MaxLich
java developer

Как в log4j одновременно писать в разные файлы сообщения с разными уровнями?

Здравствуйте. Бьюсь над проблемой, не могу решить. Хочу сделать, чтобы в один файл попадали все сообщения уровня вплоть до TRACE, а другой файл и в консоль - сообщения с уровнем не ниже INFO. Мне нужно, чтобы это происходило одновременно. У меня получается сделать только что-то одно. (Вообще, не могу понять, как логгеры из файла конфигурации соотносятся с логгерами из кода(объектами)).

Пробовал threshold и фильтры, но не помогает. Вот такой у меня файл конфигурации:
файл конфигурации log4j
# Базовый уровень логирования
log4j.rootLogger=INFO, info_log_file, stdout

# Апендер для работы с файлами
log4j.appender.info_log_file=org.apache.log4j.RollingFileAppender
log4j.appender.info_log_file.File=info_log.log
log4j.appender.info_log_file.MaxFileSize=1MB
log4j.appender.info_log_file.MaxBackupIndex=10
log4j.appender.info_log_file.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.info_log_file.layout.ConversionPattern=%d{ISO8601} [%-5p][%20c{-2}] - %m%n

#вывод в консоль
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} [%-5p][%20c{-2}] - %m%n

# Уровень логирования (для постоянно работы приложения на сервере)
log4j.logger.info=TRACE, full_log_file

# Апендер для работы с файлами
log4j.appender.full_log_file=org.apache.log4j.RollingFileAppender
log4j.appender.full_log_file.File=full_log.log
#log4j.appender.full_log_file.threshold=TRACE
#log4j.appender.full_log_file.filter.a=org.apache.log4j.varia.LevelRangeFilter
#log4j.appender.full_log_file.filter.a.LevelMin=TRACE
#log4j.appender.full_log_file.filter.a.LevelMax=DEBUG
#log4j.appender.full_log_file.filter.a.AcceptOnMatch=TRUE
log4j.appender.full_log_file.MaxFileSize=1MB
log4j.appender.full_log_file.MaxBackupIndex=10
log4j.appender.full_log_file.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.full_log_file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p] [%c{1}:%L] - %m%n
  • Вопрос задан
  • 958 просмотров
Пригласить эксперта
Ответы на вопрос 1
@MaxLich Автор вопроса
java developer
Пока помогло удаление уровня из объявления логгера (в конфиге; рутового логгера) и добавление каждому аппендеру своего уровня (через threshold). Вот изменённый log4j.properties:
содержимое файла log4j.properties
# Базовый уровень логирования
log4j.rootLogger=TRACE, info_log_file, stdout, full_log_file

# Апендер для работы с файлами
log4j.appender.info_log_file=org.apache.log4j.RollingFileAppender
log4j.appender.info_log_file.File=info_log.log
log4j.appender.info_log_file.threshold=INFO
log4j.appender.info_log_file.MaxFileSize=1MB
log4j.appender.info_log_file.MaxBackupIndex=10
log4j.appender.info_log_file.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.info_log_file.layout.ConversionPattern=%d{ISO8601} [%-5p][%20c{-2}] - %m%n

#вывод в консоль
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.threshold=INFO
log4j.appender.stdout.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} [%-5p][%20c{-2}] - %m%n

# Апендер для работы с файлами
log4j.appender.full_log_file=org.apache.log4j.RollingFileAppender
log4j.appender.full_log_file.File=full_log.log
log4j.appender.full_log_file.threshold=TRACE
log4j.appender.full_log_file.MaxFileSize=1MB
log4j.appender.full_log_file.MaxBackupIndex=10
log4j.appender.full_log_file.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.full_log_file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p] [%c{1}:%L] - %m%n

Но я не уверен, что это правильное решение.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы