Создание нескольких файлов журналов разного содержания с помощью log4j

Есть ли способ настроить log4j так, чтобы он выводил разные уровни ведения журнала в разные приложения?

Я пытаюсь создать несколько файлов журнала. Главный файл журнала будет улавливать все сообщения INFO и выше для всех классов. (В процессе разработки он будет улавливать все сообщения DEBUG и выше, а также TRACE для определенных классов.)

Затем я хотел бы иметь отдельный файл журнала. Этот файл журнала будет улавливать все сообщения DEBUG для определенного подмножества классов и игнорировать все сообщения для любого другого класса.

Есть ли способ получить то, что мне нужно?


person Community    schedule 08.04.2009    source источник
comment
Вы имеете в виду, что хотите, чтобы один файл журнала записывал DEBUG и только DEBUG, другой файл журнала записывал INFO и только INFO, и так далее?   -  person Eddie    schedule 08.04.2009


Ответы (5)


Это должно помочь вам начать:

log4j.rootLogger=QuietAppender, LoudAppender, TRACE
# setup A1
log4j.appender.QuietAppender=org.apache.log4j.RollingFileAppender
log4j.appender.QuietAppender.Threshold=INFO
log4j.appender.QuietAppender.File=quiet.log
...


# setup A2
log4j.appender.LoudAppender=org.apache.log4j.RollingFileAppender
log4j.appender.LoudAppender.Threshold=DEBUG
log4j.appender.LoudAppender.File=loud.log
...

log4j.logger.com.yourpackage.yourclazz=TRACE
person jasonnerothin    schedule 08.04.2009
comment
Что делает самая последняя строчка? - person djangofan; 11.03.2012
comment
@djangofan устанавливает собственный уровень журнала пакета / класса (т.е. com.yourpackage.yourclazz с ведением журнала TRACE), хотя в этом случае он уже был по умолчанию (установлен в строке 1), поэтому ничего не делает. ИМО, этот пример был бы лучше, если бы у rootLogger была ИНФОРМАЦИЯ, а у вашего класса была ОТЛАДКА. - person Tom Clift; 21.05.2012
comment
Параметры первой строки должны быть TRACE, QuietAppender, LoudAppender, а не QuietAppender, LoudAppender, TRACE. - person Richard Whitehead; 25.10.2016

Возможно, что-то вроде этого?

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
 <!-- general application log -->
 <appender name="MainLogFile" class="org.apache.log4j.FileAppender">
  <param name="File" value="server.log" />
  <param name="Threshold" value="INFO" />
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/>
  </layout>
 </appender> 
 <!-- additional fooSystem logging -->
 <appender name="FooLogFile" class="org.apache.log4j.FileAppender">
  <param name="File" value="foo.log" />
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/>
  </layout>
 </appender>
 <!-- foo logging -->
 <logger name="com.example.foo">
  <level value="DEBUG"/>
  <appender-ref ref="FooLogFile"/>
 </logger>
 <!-- default logging -->
 <root>
  <level value="INFO"/>
  <appender-ref ref="MainLogFile"/>
 </root>
</log4j:configuration>

Таким образом, все информационные сообщения записываются в server.log; Напротив, foo.log содержит только сообщения com.example.foo, включая сообщения уровня отладки.

person araqnid    schedule 08.04.2009
comment
Com.example.foo - это пакет или класс? - person WowBow; 14.05.2015
comment
@WowBow это может быть и то, и другое, но с таким именем он выглядит как пакет. использование имен классов для регистраторов - это просто соглашение - person araqnid; 14.05.2015
comment
Спасибо. Я попробовал оба после того, как попросил, и работает для обоих;) - person WowBow; 14.05.2015

У меня был этот вопрос, но с изюминкой - я пытался записывать разный контент в разные файлы. У меня была информация для журнала отладки низкого уровня и журнала пользователя высокого уровня. Я хотел, чтобы LowLevel переходил только к одному файлу, а HighLevel - к файлу и syslogd.

Мое решение состояло в том, чтобы настроить 3 приложения, а затем настроить ведение журнала следующим образом:

log4j.threshold=ALL
log4j.rootLogger=,LowLogger

log4j.logger.HighLevel=ALL,Syslog,HighLogger
log4j.additivity.HighLevel=false

Мне было трудно понять, что в log4j.logger могло быть несколько добавлений. Я пытался делать это по одной строчке за раз.

Надеюсь, это поможет кому-то в какой-то момент!

person Kieveli    schedule 06.05.2009

Для основного файла журнала / приложения установите .Threshold = INFO, чтобы ограничить то, что фактически регистрируется в приложении, до INFO и выше, независимо от того, включены ли в регистраторах DEBUG, TRACE и т. Д.

Что касается отлова DEBUG и ничего выше этого ... вам, вероятно, придется написать собственный аппендер.

Однако я бы порекомендовал этого не делать, так как это может усложнить поиск и устранение неисправностей и анализ:

  1. Если ваша цель состоит в том, чтобы иметь один файл, в котором вы могли бы искать и устранять неполадки, то объединение данных журнала в разные файлы будет раздражать - если у вас нет строго регламентированной политики ведения журнала, вам, вероятно, понадобится контент из DEBUG и INFO для уметь эффективно отслеживать выполнение проблемного кода.
  2. Продолжая регистрировать все свои отладочные сообщения, вы теряете прирост производительности, который вы обычно получаете в производственной системе, выключая ведение журнала (способ) вниз.
person matt b    schedule 08.04.2009
comment
Я должен был лучше объяснить свою цель. Главный журнал предназначен для отслеживания ошибок, необычных условий и т. Д. В любом месте приложения - этот журнал должен быть небольшим, чтобы он регулярно обновлялся. Специальный журнал отслеживает поведение одной подсистемы и должен храниться в течение длительного времени. - person ; 08.04.2009
comment
Вы хотите исключить сообщения ERROR, WARN, INFO из второго файла журнала? - person matt b; 08.04.2009
comment
а в XML вы можете добавить параметр Threshold следующим образом: ‹имя приложения = ERROR_FILE› ‹имя параметра = значение порога = ERROR /› ‹/appender› - person razor; 24.01.2017

Ссылка на демонстрацию: https://github.com/RazvanSebastian/spring_multiple_log_files_demo.git

Мое решение основано на конфигурации XML с использованием spring-boot-starter-log4j. Пример представляет собой базовый пример с использованием spring-boot-starter, и два регистратора записывают в разные файлы журнала.

person Rzv Razvan    schedule 01.02.2019