.NET 6 NLog配置问题:Microsoft.Extensions.*日志重复写入其他文件
修复NLog日志分流问题
问题出在当前规则的日志名称匹配范围不足:
- 原规则
name="Microsoft.Extensions.*"仅能匹配以Microsoft.Extensions.(末尾带点)为前缀的日志名称 - 部分
Microsoft.Extensions相关日志的logger名称为Microsoft.Extensions(不带末尾的点),这类日志会绕过第一个规则,被后续的*规则写入OtherLog
修复方案
调整第一个日志规则的名称匹配模式,覆盖所有以Microsoft.Extensions开头的日志,同时保留final="true"确保匹配到的日志不会被后续规则重复处理:
<?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <!-- Define targets --> <targets> <!-- Target for Microsoft.Extensions.* namespaces --> <target xsi:type="File" name="MicrosoftExtensionsLog" fileName="logs/MicrosoftExtensions.log" layout="${longdate} ${uppercase:${level}} ${message}${exception:format=tostring}" /> <!-- Target for other namespaces --> <target xsi:type="File" name="OtherLog" fileName="logs/Other.log" layout="${longdate} ${uppercase:${level}} ${message}${exception:format=tostring}" /> </targets> <!-- Define rules --> <!-- 调整name为Microsoft.Extensions*,覆盖所有以Microsoft.Extensions开头的日志 --> <logger name="Microsoft.Extensions*" minlevel="Trace" writeTo="MicrosoftExtensionsLog" final="true" /> <!-- Log everything else to OtherLog --> <logger name="*" minlevel="Trace" writeTo="OtherLog" /> </nlog>
关键说明
name="Microsoft.Extensions*":通配符*会匹配Microsoft.Extensions以及所有以Microsoft.Extensions.开头的子命名空间日志final="true":标记此规则为最终规则,匹配到的日志不会再被后续规则处理,彻底避免重复写入
内容的提问来源于stack exchange,提问作者ashlar64
相关产品推荐
相关产品推荐

