Создание нескольких файлов журналов различного контента с log4j - PullRequest
81 голосов
/ 08 апреля 2009

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

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

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

Есть ли способ получить то, что я ищу?

Спасибо, Dan

Ответы [ 5 ]

70 голосов
/ 08 апреля 2009

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

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
26 голосов
/ 08 апреля 2009

Может, как-то так?

<!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, включая сообщения уровня отладки.

7 голосов
/ 06 мая 2009

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

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

log4j.threshold=ALL
log4j.rootLogger=,LowLogger

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

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

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

3 голосов
/ 08 апреля 2009

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

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

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

  1. Если ваша цель состоит в том, чтобы иметь один файл, в котором вы можете искать что-то для устранения неполадок, то охват ваших журнальных данных различными файлами будет раздражать - если у вас нет очень регламентированной политики ведения журналов, вам, скорее всего, понадобится контент из обоих отладчиков. и INFO, чтобы иметь возможность эффективно отслеживать выполнение проблемного кода.
  2. Продолжая регистрировать все ваши сообщения отладки, вы теряете любой прирост производительности, который вы обычно получаете в производственной системе, отключая ведение журнала (путь).
0 голосов
/ 01 февраля 2019

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

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

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