Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于Logback';s筛分机_Java_Logging_Logback_Sifting Appender - Fatal编程技术网

Java 用于Logback';s筛分机

Java 用于Logback';s筛分机,java,logging,logback,sifting-appender,Java,Logging,Logback,Sifting Appender,在筛选追加器设置的情况下,当MDC键设置为默认值时,是否有方法引用回退追加器 例如,当MDC键设置为不同于默认值的值时,我希望使用文件追加器,但当MDC键设置为默认值时,我希望登录到控制台 我现在看到的唯一解决方案是对SiftingAppender类进行子类化,并覆盖append(E事件)如果MDC键设置为默认值,则返回到默认追加器的逻辑。您可以使用Logback以互斥条件筛选您的筛选追加器和您的控制台追加器 过滤器声明示例: 使用Groovy表示“包含默认MDC密钥”条件: <filt

在筛选追加器设置的情况下,当MDC键设置为默认值时,是否有方法引用回退追加器

例如,当MDC键设置为不同于默认值的值时,我希望使用文件追加器,但当MDC键设置为默认值时,我希望登录到控制台


我现在看到的唯一解决方案是对
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
    中立的
    否认
    
假设您选择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.get(“yourMdcKey”)==null
/
mdc.get(“yourMdcKey”)!=null
表示此条件:MDC键是否设置为默认值?。您的默认值可能不是
null
,而是某个填充值,如果是这样,您将相应地更改条件语句

此方法允许您在appender前面声明一个gate,此gate应用以下测试:

  • 对于
    FileAppender
    ,如果未填充MDC键,则忽略该事件,否则接受该事件
  • 对于
    SiftingAppender
    ,如果未填充MDC键,则忽略该事件,否则接受该事件

您可以使用Logback以互斥条件筛选您的
筛选追加器
和您的
控制台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
    中立的
    否认
    
假设您选择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.get(“yourMdcKey”)==null
/
mdc.get(“yourMdcKey”)!=null
表示此条件:MDC键是否设置为默认值?。您的默认值可能不是
null
,而是某个填充值,如果是这样,您将相应地更改条件语句

此方法允许您在appender前面声明一个gate,此gate应用以下测试:

  • 对于
    FileAppender
    ,如果未填充MDC键,则忽略该事件,否则接受该事件
  • 对于
    SiftingAppender
    ,如果未填充MDC键,则忽略该事件,否则接受该事件

谢谢你的回答,它帮助我完成了这项工作。不过,我必须在两个过滤器上切换中性和拒绝,因为我希望在MDC包含值时运行筛选附加程序。你写“如果填充了MDC密钥,那么接受事件,否则忽略事件”,你可能也想修复它。谢谢你的回答,它帮助我完成了这项工作。不过,我必须在两个过滤器上切换中性和拒绝,因为我希望在MDC包含值时运行筛选附加程序。您编写了“如果填充了MDC密钥,则接受事件,否则忽略事件”,您可能还希望修复它。