【问题标题】:Can you filter on Logger level in log4net您可以在 log4net 中的 Logger 级别进行过滤吗
【发布时间】:2009-04-15 11:53:49
【问题描述】:

我想过滤掉包含指定字符串的消息。我使用了log4net.Filter.StringMatchFilter,但这仅适用于附加程序。

我想已经在 Logger 级别过滤该消息。大致如下:

<logger name="MyLogger.WebServices">
    <level value="Debug" />
    <filter type="log4net.Filter.StringMatchFilter">
        <stringToMatch value="do not log me" />
        <acceptOnMatch value="false" />
    </filter>
    <appender-ref ref="file" />
    <appender-ref ref="debug" />
</logger>

真的可以这样吗?或者有什么不同的方法来处理这种情况。

【问题讨论】:

    标签: filter log4net logging


    【解决方案1】:

    过滤器仅用于附加程序。如果您需要过滤掉多个 appender 的事件,您可以使用 forwardingappender 进行预过滤。这样您就不必在多个附加程序上复制和粘贴相同的过滤器。

    您的示例如下所示:

    <appender name="screeningAppender" type="log4net.Appenders.ForwardingAppender">
        <filter type="log4net.Filter.StringMatchFilter">
                <stringToMatch value="do not log me" />
                <acceptOnMatch value="false" />
        </filter>
    
        <appender-ref ref="file" />
        <appender-ref ref="debug" />
    </appender>
    
    <logger name="MyLogger.WebServices">
        <level value="Debug" />
        <appender-ref ref="screeningAppender" />
    </logger>
    

    【讨论】:

    • 这就是我所担心的。干杯!
    • 我曾想过制作一个自定义 appender 或从具有环境意识的 appender 派生(例如开发或生产),但我喜欢将其移至过滤器以“赋予”所有 appender 该功能的想法.
    • 不幸的是,它对我不起作用。我正在使用 LevelToMatch 过滤器,但它没有转发。也许是因为过滤器是一个acceptOnMatch = true,后面有一个denyAll…不知道。
    • @Alex - 你在让它工作时仍然遇到问题吗?如果是这样,也许您可​​以在包含您的配置的情况下提出一个问题,以便我们查看它:)
    猜你喜欢
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 2020-06-30
    • 2019-09-05
    • 2019-03-22
    相关资源
    最近更新 更多