Java 用于Logback';s筛分机
在筛选追加器设置的情况下,当MDC键设置为默认值时,是否有方法引用回退追加器 例如,当MDC键设置为不同于默认值的值时,我希望使用文件追加器,但当MDC键设置为默认值时,我希望登录到控制台Java 用于Logback';s筛分机,java,logging,logback,sifting-appender,Java,Logging,Logback,Sifting Appender,在筛选追加器设置的情况下,当MDC键设置为默认值时,是否有方法引用回退追加器 例如,当MDC键设置为不同于默认值的值时,我希望使用文件追加器,但当MDC键设置为默认值时,我希望登录到控制台 我现在看到的唯一解决方案是对SiftingAppender类进行子类化,并覆盖append(E事件)如果MDC键设置为默认值,则返回到默认追加器的逻辑。您可以使用Logback以互斥条件筛选您的筛选追加器和您的控制台追加器 过滤器声明示例: 使用Groovy表示“包含默认MDC密钥”条件: <filt
我现在看到的唯一解决方案是对
SiftingAppender
类进行子类化,并覆盖append(E事件)
如果MDC键设置为默认值,则返回到默认追加器的逻辑。您可以使用Logback以互斥条件筛选您的筛选追加器
和您的控制台追加器
过滤器声明示例:
- 使用Groovy表示“包含默认MDC密钥”条件:
<filter class="ch.qos.logback.core.filter.EvaluatorFilter"> <!-- GEventEvaluator requires Groovy --> <evaluator class="ch.qos.logback.classic.boolex.GEventEvaluator"> <expression> mdc.get("servicekey") == null </expression> </evaluator> <OnMismatch>NEUTRAL</OnMismatch> <OnMatch>DENY</OnMatch> </filter>
<filter class="ch.qos.logback.core.filter.EvaluatorFilter"> <!-- JaninoEventEvaluator requires Janino --> <evaluator class="ch.qos.logback.classic.boolex.JaninoEventEvaluator"> <expression> mdc.get("yourMdcKey") == null </expression> </evaluator> <OnMismatch>NEUTRAL</OnMismatch> <OnMatch>DENY</OnMatch> </filter>
mdc.get(“servicekey”)==null 中立的 否认
- 使用Janino表示“包含默认MDC密钥”条件:
<filter class="ch.qos.logback.core.filter.EvaluatorFilter"> <!-- GEventEvaluator requires Groovy --> <evaluator class="ch.qos.logback.classic.boolex.GEventEvaluator"> <expression> mdc.get("servicekey") == null </expression> </evaluator> <OnMismatch>NEUTRAL</OnMismatch> <OnMatch>DENY</OnMatch> </filter>
<filter class="ch.qos.logback.core.filter.EvaluatorFilter"> <!-- JaninoEventEvaluator requires Janino --> <evaluator class="ch.qos.logback.classic.boolex.JaninoEventEvaluator"> <expression> mdc.get("yourMdcKey") == null </expression> </evaluator> <OnMismatch>NEUTRAL</OnMismatch> <OnMatch>DENY</OnMatch> </filter>
mdc.get(“yourMdcKey”)==null 中立的 否认
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator class="ch.qos.logback.classic.boolex.JaninoEventEvaluator">
<expression>
mdc.get("yourMdcKey") == null
</expression>
</evaluator>
<OnMismatch>NEUTRAL</OnMismatch>
<OnMatch>DENY</OnMatch>
</filter>
...
</appender>
<appender name="SIFTER" class="ch.qos.logback.classic.sift.SiftingAppender">
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator class="ch.qos.logback.classic.boolex.JaninoEventEvaluator">
<expression>
mdc.get("yourMdcKey") == null
</expression>
</evaluator>
<OnMismatch>NEUTRAL</OnMismatch>
<OnMatch>DENY</OnMatch>
</filter>
...
</appender>
mdc.get(“yourMdcKey”)==null
中立的
否认
...
mdc.get(“yourMdcKey”)==null
中立的
否认
...
注意:在上面的示例中,我使用了mdc.get(“yourMdcKey”)==null
/mdc.get(“yourMdcKey”)!=null
表示此条件:MDC键是否设置为默认值?。您的默认值可能不是null
,而是某个填充值,如果是这样,您将相应地更改条件语句
此方法允许您在appender前面声明一个gate,此gate应用以下测试:
- 对于
,如果未填充MDC键,则忽略该事件,否则接受该事件FileAppender
- 对于
,如果未填充MDC键,则忽略该事件,否则接受该事件SiftingAppender
筛选追加器
和您的控制台pender
过滤器声明示例:
- 使用Groovy表示“包含默认MDC密钥”条件:
<filter class="ch.qos.logback.core.filter.EvaluatorFilter"> <!-- GEventEvaluator requires Groovy --> <evaluator class="ch.qos.logback.classic.boolex.GEventEvaluator"> <expression> mdc.get("servicekey") == null </expression> </evaluator> <OnMismatch>NEUTRAL</OnMismatch> <OnMatch>DENY</OnMatch> </filter>
<filter class="ch.qos.logback.core.filter.EvaluatorFilter"> <!-- JaninoEventEvaluator requires Janino --> <evaluator class="ch.qos.logback.classic.boolex.JaninoEventEvaluator"> <expression> mdc.get("yourMdcKey") == null </expression> </evaluator> <OnMismatch>NEUTRAL</OnMismatch> <OnMatch>DENY</OnMatch> </filter>
mdc.get(“servicekey”)==null 中立的 否认
- 使用Janino表示“包含默认MDC密钥”条件:
<filter class="ch.qos.logback.core.filter.EvaluatorFilter"> <!-- GEventEvaluator requires Groovy --> <evaluator class="ch.qos.logback.classic.boolex.GEventEvaluator"> <expression> mdc.get("servicekey") == null </expression> </evaluator> <OnMismatch>NEUTRAL</OnMismatch> <OnMatch>DENY</OnMatch> </filter>
<filter class="ch.qos.logback.core.filter.EvaluatorFilter"> <!-- JaninoEventEvaluator requires Janino --> <evaluator class="ch.qos.logback.classic.boolex.JaninoEventEvaluator"> <expression> mdc.get("yourMdcKey") == null </expression> </evaluator> <OnMismatch>NEUTRAL</OnMismatch> <OnMatch>DENY</OnMatch> </filter>
mdc.get(“yourMdcKey”)==null 中立的 否认
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator class="ch.qos.logback.classic.boolex.JaninoEventEvaluator">
<expression>
mdc.get("yourMdcKey") == null
</expression>
</evaluator>
<OnMismatch>NEUTRAL</OnMismatch>
<OnMatch>DENY</OnMatch>
</filter>
...
</appender>
<appender name="SIFTER" class="ch.qos.logback.classic.sift.SiftingAppender">
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator class="ch.qos.logback.classic.boolex.JaninoEventEvaluator">
<expression>
mdc.get("yourMdcKey") == null
</expression>
</evaluator>
<OnMismatch>NEUTRAL</OnMismatch>
<OnMatch>DENY</OnMatch>
</filter>
...
</appender>
mdc.get(“yourMdcKey”)==null
中立的
否认
...
mdc.get(“yourMdcKey”)==null
中立的
否认
...
注意:在上面的示例中,我使用了mdc.get(“yourMdcKey”)==null
/mdc.get(“yourMdcKey”)!=null
表示此条件:MDC键是否设置为默认值?。您的默认值可能不是null
,而是某个填充值,如果是这样,您将相应地更改条件语句
此方法允许您在appender前面声明一个gate,此gate应用以下测试:
- 对于
,如果未填充MDC键,则忽略该事件,否则接受该事件FileAppender
- 对于
,如果未填充MDC键,则忽略该事件,否则接受该事件SiftingAppender