[英]Fallback appender for Logback's SiftingAppender
在SiftingAppender
设置的情况下,当MDC密钥设置为默认值时,是否可以引用备用附加程序?
例如,当MDC密钥设置为与默认值不同的值时,我想使用文件追加器,但是当MDC密钥设置为默认值时,登录到控制台。
我现在看到的唯一解决方案是将SiftingAppender
类子类化,并且如果MDC密钥设置为默认值,则重写append(E event)
逻辑以回SiftingAppender
默认的附加程序。
您可以使用Logback 过滤器以互斥条件过滤SiftingAppender
和ConsoleAppender
。
过滤器声明示例:
使用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>
使用Janino表示“包含默认MDC密钥”条件:
<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>
假设您选择Janino过滤器,那么您的附加器将被声明如下:
<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密钥是否设置为默认值? 。 您的默认值很可能不是null
而是可能是一些填充值,如果是,那么您将相应地更改条件语句。
这种方法允许您在附加程序前面声明一个门,并且此门将应用以下测试:
FileAppender
如果未填充MDC密钥,则忽略该事件,否则接受该事件 SiftingAppender
如果未填充MDC密钥,则忽略该事件,否则接受该事件
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.