Создание нескольких файлов журналов различного содержания с помощью log4j
Есть ли способ настроить log4j так, чтобы он выводил разные уровни ведения журнала в разные приложения?
Я пытаюсь настроить несколько файлов журнала. Основной файл журнала будет захватывать все сообщения INFO и выше для всех классов. (В разработке он будет захватывать все сообщения DEBUG и выше, а TRACE - для определенных классов.)
Затем я хотел бы иметь отдельный файл журнала. Этот файл журнала будет захватывать все сообщения DEBUG для определенного поднабора классов и игнорировать все сообщения для любого другого класса.
Есть ли способ получить то, что мне нужно?
Спасибо,
Dan
Ответы
Ответ 1
Это должно помочь вам:
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
Ответ 2
Возможно, что-то вроде этого?
<!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>
Таким образом, все информационные сообщения записываются на сервер .log; напротив, foo.log содержит только сообщения com.example.foo, в том числе сообщения уровня отладки.
Ответ 3
У меня был этот вопрос, но с завихрением - я пытался записать другой контент в разные файлы. У меня была информация для журнала отладки LowLevel и журнала пользователей HighLevel. Я хотел, чтобы LowLevel перешел только к одному файлу, а HighLevel - как к файлу, так и к syslogd.
Мое решение состояло в том, чтобы настроить 3 appenders, а затем настроить регистрацию следующим образом:
log4j.threshold=ALL
log4j.rootLogger=,LowLogger
log4j.logger.HighLevel=ALL,Syslog,HighLogger
log4j.additivity.HighLevel=false
Часть, которую мне трудно было понять, заключалась в том, что в log4j.logger можно было указать несколько добавлений. Я пытался сделать это по одной строке за раз.
Надеюсь, это поможет кому-то в какой-то момент!
Ответ 4
Для основного файла журнала /appender настройте .Threshold = INFO
, чтобы ограничить то, что действительно зарегистрировано в приложении, до INFO и выше, независимо от того, включены ли логины DEBUG, TRACE и т.д.
Что касается ловушки DEBUG и ничего выше этого... вам, вероятно, придется писать пользовательский appender.
Однако я бы порекомендовал не делать этого, так как кажется, что это затруднит устранение неполадок и анализ:
- Если ваша цель состоит в том, чтобы иметь один файл, в котором вы можете найти что-то, чтобы устранить что-то, то распространение данных журнала в разных файлах будет раздражать - если у вас нет очень регламентированной политики ведения журнала, вам, скорее всего, понадобится контент из обоих DEBUG и INFO, чтобы иметь возможность эффективно отслеживать выполнение проблемного кода.
- Если вы все еще регистрируете все свои отладочные сообщения, вы теряете прирост производительности, который обычно получаете в производственной системе, поворачивая журнал (путь) вниз.
Ответ 5
Демонстрационная ссылка: https://github.com/RazvanSebastian/spring_multiple_log_files_demo.git
Мое решение основано на конфигурации XML с использованием spring-boot-starter-log4j
. Этот пример является базовым примером использования spring-boot-starter
и два регистратора записывают в разные файлы журнала.