Как выводить логи разных уровней в стандартный вывод на основе параметра строки cmd?
Я использую slf4j 1.7.2 с logback 1.0.7. Я хочу иметь возможность предоставить параметр командной строки для моего Java-приложения, который устанавливает уровень сообщений, записываемых в stdout. Например, -logLevel trace
должно приводить ко всем зарегистрированным сообщениям, но -logLevel warning
только в предупреждениях и ошибках. Журналы должны поступать от всех регистраторов в приложении (= корневой регистратор).
В настоящее время у меня есть ConsoleAppender
за System.out
это обеспечивает с помощью TresholdFilter
, только это info
warning
а также error
сообщения распечатываются на стандартный вывод. Корневой регистратор ссылается на него. Я не знаю, как программно изменить отфильтрованные уровни для этого приложения, и мне нужно основывать зарегистрированные уровни на параметре командной строки.
Хотя уровни, зарегистрированные в stdout, должны быть затронуты, я все же хочу, чтобы корневой регистратор регистрировал все уровни, так как они отправляются другим приложениям, например diagnostics.txt
файл, который должен иметь все уровни все время.
Ура!
Konrad
1 ответ
Файл конфигурации Logback позволяет использовать переменные. Вы можете определить системное свойство (параметр -D для JVM) и использовать это значение в файле конфигурации. Синтаксис:
${VARIABLE_NAME}
Вы должны быть в состоянии определить переменную, скажем -DSYSOUT_LOG_LEVEL=ERROR. Затем в вашем файле logback.xml вместо установки определенного уровня для фильтра вы можете использовать ${SYSOUT_LOG_LEVEL}, например
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>${SYSOUT_LOG_LEVEL}</level>
</filter>