繁体   English   中英

Logback的SiftingAppender的后备附加程序

[英]Fallback appender for Logback's SiftingAppender

SiftingAppender设置的情况下,当MDC密钥设置为默认值时,是否可以引用备用附加程序?

例如,当MDC密钥设置为与默认值不同的值时,我想使用文件追加器,但是当MDC密钥设置为默认值时,登录到控制台。

我现在看到的唯一解决方案是将SiftingAppender类子类化,并且如果MDC密钥设置为默认值,则重写append(E event)逻辑以回SiftingAppender默认的附加程序。

您可以使用Logback 过滤器以互斥条件过滤SiftingAppenderConsoleAppender

过滤器声明示例:

  • 使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM