Вот мой вариант использования.
В зависимости от определенного типа запросов, мне нужно отладить их. Они должны идти в отдельный файл. Я пытаюсь добиться этого, используя DynamicThresholdFilter , и вот как выглядит мой logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<turboFilter class="ch.qos.logback.classic.turbo.DynamicThresholdFilter">
<Key>debug</Key>
<DefaultThreshold>INFO</DefaultThreshold>
<OnHigherOrEqual>NEUTRAL</OnHigherOrEqual>
<OnLower>ACCEPT</OnLower>
<MDCValueLevelPair>
<value>true</value>
<level>DEBUG</level>
</MDCValueLevelPair>
</turboFilter>
<appender name="JSONFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>main.log.json</file>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
<appender name="DEBUGFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>debug.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>DENY</onMatch>
</filter>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
</filter>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>TRACE</level>
<onMatch>ACCEPT</onMatch>
</filter>
</appender>
....
<root level="INFO">
<appender-ref ref="JSONFILE" />
<appender-ref ref="DEBUGFILE" />
</root>
</configuration>
В коде приложения у меня есть следующая строка
if(Boolean.parseBoolean(MDC.get("debug"))) {
logger.info("Setting log level to Debug");
logger.debug("This should appear in debug logs ");
}
Что происходит, так это то, что я вижу, что журналы информационного уровня logger.info("Setting log level to Debug");
появляются в main.log.json
, но журнал уровня отладки, т.е. logger.debug("This should appear in debug logs ");
не отображается в debug.log
Есть мысли? Совет?