【问题标题】:How to make log4net.Filter.StringMatchFilter work with acceptOnMatch set to false如何使 log4net.Filter.StringMatchFilter 在 acceptOnMatch 设置为 false 的情况下工作
【发布时间】:2013-01-27 13:34:45
【问题描述】:

我刚刚开始使用 log4net,但在使用字符串进行过滤时遇到了一些问题。

我正在尝试在我的 log4net 日志文件中删除 EPiServer 特定的日志记录,因为我对此不感兴趣。

我对 appender 有以下 log4net 配置:

        <filter type="log4net.Filter.LevelRangeFilter">
           <levelMin value="DEBUG" />
        </filter>

        <filter type="log4net.Filter.StringMatchFilter">
            <stringToMatch value="EPiServer" />
            <acceptOnMatch value="false" />
        </filter>
        <filter type="log4net.Filter.DenyAllFilter" />

我只有一个根记录器。此配置不会停止 EPiServer 日志记录。

我做错了什么?

【问题讨论】:

    标签: log4net episerver


    【解决方案1】:

    你应该删除该行

    <filter type="log4net.Filter.DenyAllFilter" />
    

    来自docs

    您可以将此过滤器添加到过滤器链的末尾以从 默认“接受所有,除非另有说明”过滤 “除非另有说明,否则拒绝一切”的行为。

    这有效地颠倒了拒绝所有消息的逻辑,除非使用&lt;acceptOnMatch value="true" /&gt;&lt;filter&gt;中明确列入白名单

    【讨论】:

      【解决方案2】:

      尝试将您的 StringMatchFilter 更改为 LoggerMatchFilter

      <filter type="log4net.Filter.LoggerMatchFilter">
        <loggerToMatch value="EPiServer" />
        <acceptOnMatch value="false" />  
      </filter>
      

      StringMatchFilter 过滤日志消息的内容,其中 LoggerMatch 过滤 Logger 的类名或部分命名空间

      【讨论】:

      • 我只使用根记录器,我猜 EPiServer 也是如此,所以也许这就是为什么我不能为我完成这项工作?
      • 澄清一下:我尝试按照建议使用过滤器,但 EpiServer 条目仍然显示在日志文件中。
      • 过滤器元素需要放在您选择的附加程序中,而不是在根元素中。
      • 同样将levelrangefilter移到链的末尾,否则所有DEBUG消息都已经通过了
      猜你喜欢
      • 2012-05-04
      • 2012-01-14
      • 2011-02-13
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 2013-01-26
      • 1970-01-01
      • 2020-11-29
      相关资源
      最近更新 更多