.NET 6中如何通过NLog阻止特定命名空间的日志记录
过滤NLog中Microsoft.Extensions.*命名空间的日志配置方法
要跳过所有Microsoft.Extensions.*命名空间的日志,只需在NLog.config中通过日志规则或目标过滤实现,以下是两种常用方案:
方案一:通过日志规则全局过滤
在<rules>节点中添加一条优先级更高的拒绝规则,匹配所有Microsoft.Extensions.开头的日志记录器,直接跳过后续处理:
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <!-- 目标配置(比如文件输出) --> <targets> <target name="file" xsi:type="File" fileName="logs/app.log" /> </targets> <rules> <!-- 先拒绝Microsoft.Extensions.*的日志,不写入任何目标 --> <logger name="Microsoft.Extensions.*" minlevel="Trace" writeTo="false" final="true" /> <!-- 其他正常日志规则 --> <logger name="*" minlevel="Info" writeTo="file" /> </rules> </nlog>
name="Microsoft.Extensions.*":匹配所有以Microsoft.Extensions.开头的日志记录器writeTo="false":不写入任何目标final="true":匹配后不再执行后续规则,确保该日志被彻底跳过
方案二:针对特定日志目标过滤
如果只想让某个特定文件目标跳过这类日志,可以在<target>节点中添加<filters>配置:
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <targets> <target name="file" xsi:type="File" fileName="logs/app.log"> <!-- 添加过滤器,拒绝Microsoft.Extensions.*的日志 --> <filters> <when condition="starts-with('${logger}','Microsoft.Extensions.')" action="Ignore" /> </filters> </target> </targets> <rules> <logger name="*" minlevel="Info" writeTo="file" /> </rules> </nlog>
starts-with('${logger}','Microsoft.Extensions.'):判断日志记录器名称是否以指定前缀开头action="Ignore":忽略符合条件的日志,不写入该目标
两种方案都能实现需求,方案一适合全局过滤所有目标,方案二更灵活,可针对单个目标配置。
内容的提问来源于stack exchange,提问作者ashlar64
相关产品推荐
相关产品推荐

