Проблема
Я хочу стандартизировать свою log4j2.xml
настройку для нескольких Java процессов, которые я запускаю на разных linux серверах. Мое жесткое условие: единый log4j2.xml
для всех серверов.
Иногда требуется, чтобы я изменил свой loglevel
с INFO
на DEBUG
, пока выполняется процесс Java. Вы можете сделать это, изменив logLevel
в log4j2.xml
, пока у вас настроено monitorInterval
.
Однако это изменяет loglevel
ВСЕХ процессов, запущенных на этом сервере! Мне нужно решение, в котором я могу изменить logLevel для одного процесса.
Моя первая попытка
Я подумал, что переместу logLevel в свойства. Предположим, у меня есть log4j2.xml
(в качестве примера):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Configuration monitorInterval="30">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d %t %-5p %-32c{1} - %m%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="${bundle:logger:logLevel}">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
Рядом с этим у меня также есть файл logger.properties
в пути к классам:
logLevel=INFO
Теперь, когда я измените мой log4j2.xml
(просто добавив где-нибудь пробел) и обновив этот файл свойств, журнал изменится. Однако, как уже упоминалось, это изменяет logLevel
ВСЕХ процессов.
Что я хочу
Я хочу иметь logger.properties
, который выглядит так:
process1LogLevel=INFO
process2LogLevel=DEBUG
А затем что-то в log4j2.xml
, которое динамически настраивает это свойство:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Configuration monitorInterval="30">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d %t %-5p %-32c{1} - %m%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="${bundle:logger:<something based on the process name>}">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
Однако это «гибкое» свойство на самом деле не работает. Есть ли у вас идея решения?
Примечание
Если у вас есть другая идея, которая выглядит немного иначе, но позволяет достичь моих целей, это тоже хорошо! Всегда приветствуются любые нестандартные решения :)