这是我的用例。
根据某些类型的请求,我需要调试日志。这些应转到单独的文件。我正在尝试使用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
中>
有什么想法吗?忠告?