Logback-在运行时以编程方式修改DynamicThresholdFilter(TurboFilter)

问题描述 投票:2回答:2

我们正在使用带有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。

logback
2个回答
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
投票
我认为您可以添加另一个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");
© www.soinside.com 2019 - 2024. All rights reserved.