Как выводить логи разных уровней в стандартный вывод на основе параметра строки cmd?

Я использую slf4j 1.7.2 с logback 1.0.7. Я хочу иметь возможность предоставить параметр командной строки для моего Java-приложения, который устанавливает уровень сообщений, записываемых в stdout. Например, -logLevel trace должно приводить ко всем зарегистрированным сообщениям, но -logLevel warning только в предупреждениях и ошибках. Журналы должны поступать от всех регистраторов в приложении (= корневой регистратор).

В настоящее время у меня есть ConsoleAppender за System.out это обеспечивает с помощью TresholdFilter, только это infowarning а также 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>
Другие вопросы по тегам