log4net过滤规则失效:忽略级别设置与Microsoft.AspNetCore过滤配置
问题原因
你当前配置的StringMatchFilter默认仅匹配日志消息内容,而你需要排除的Microsoft.AspNetCore属于日志的记录器(Logger)名称,不属于消息内容范畴,因此过滤规则无法触发,自然不会生效。
同时你配置的DebugAppender未添加任何过滤规则,所以IDE调试窗口依然会输出所有符合级别要求的日志。
解决方案
推荐使用专门针对Logger名称匹配的LoggerMatchFilter替换原有过滤规则,性能和匹配精准度更高。
调整后的完整log4net配置示例
<?xml version="1.0" encoding="utf-8" ?> <log4net> <appender name="DebugAppender" type="log4net.Appender.DebugAppender" > <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> </layout> <!-- 调试窗口也需要屏蔽的话,添加同下的过滤规则 --> <filter type="log4net.Filter.LoggerMatchFilter"> <loggerToMatch value="Microsoft.AspNetCore" /> <acceptOnMatch value="false" /> </filter> </appender> <appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> <file value="SDPerf.log" /> <appendToFile value="true" /> <maximumFileSize value="100KB" /> <maxSizeRollBackups value="2" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" /> </layout> <!-- 替换原有StringMatchFilter为LoggerMatchFilter --> <filter type="log4net.Filter.LoggerMatchFilter"> <loggerToMatch value="Microsoft.AspNetCore" /> <acceptOnMatch value="false" /> </filter> </appender> <root> <level value="INFO"/> <appender-ref ref="DebugAppender" /> <appender-ref ref="RollingFile" /> </root> </log4net>
补充说明
LoggerMatchFilter为前缀匹配,所有名称以Microsoft.AspNetCore开头的Logger输出的日志都会被过滤,完全符合你的需求- 配置修改完成后需重启应用生效,注意确认log4net配置文件的「复制到输出目录」属性设置为「如果较新则复制」,避免加载旧配置
内容的提问来源于stack exchange,提问作者bregia
相关产品推荐
相关产品推荐

