我们正在使用具有DynamicThreshholdFilter定义的logback,如下所示
<turboFilter class="ch.qos.logback.classic.turbo.DynamicThresholdFilter">
<Key>USER_MDC_KEY</Key>
<DefaultThreshold>DEBUG</DefaultThreshold>
<MDCValueLevelPair>
<value>USER1</value>
<level>DEBUG</level>
</MDCValueLevelPair>
</turboFilter>
有没有办法以编程方式修改MDCValueLevelPair的设置。例如,将USER1的级别修改为INFO。
答案 0 :(得分:2)
无法动态修改,因为有一项阻止它的检查。
但是,您可以使用以下内容动态设置它:
Iterator<TurboFilter> it = ((ch.qos.logback.classic.LoggerContext)LoggerFactory.getILoggerFactory()).getTurboFilterList().iterator();
while (it.hasNext()) {
TurboFilter f = it.next();
if (f instanceof DynamicThresholdFilter) {
DynamicThresholdFilter dtFilter = (DynamicThresholdFilter)f;
MDCValueLevelPair pair = new MDCValueLevelPair();
pair.setValue("USER1");
pair.setLevel(Level.INFO);
dtFilter.addMDCValueLevelPair(pair);
}
}
如果您尚未配置TurboFilter
,则可以创建一个新的并将其添加到LoggerContext
。
答案 1 :(得分:1)
我认为您可以添加另一个MDC键/值对来控制日志级别,而不是更改USER1的日志级别。
<configuration>
<turboFilter class="ch.qos.logback.classic.turbo.DynamicThresholdFilter">
<Key>LEVEL_FOR_USER1</Key>
<DefaultThreshold>DEBUG</DefaultThreshold>
<MDCValueLevelPair>
<value>INFO</value>
<level>INFO</level>
</MDCValueLevelPair>
</turboFilter>
......
</configuration>
MDC.put("LEVEL_FOR_USER1", "INFO");