如何配置NLog停止输出冗余信息,仅保留自定义日志内容?
解决NLog输出冗余日志,仅保留自定义内容的配置方案
问题根源
当前日志出现冗余,主要来自两个配置:
- JsonLayout的
includeAllProperties="true"会自动附加所有日志上下文属性 - 日志规则匹配了所有
name="*"的Logger,包含.NET框架自带的日志条目
具体修改步骤
1. 调整NLog配置文件(nlog.config)
关闭自动包含所有属性
将JsonLayout的includeAllProperties从true改为false,仅保留你自定义的字段:
<target xsi:type="File" name="jsonFile" fileName="${logDirectory}/${logSourceName}-${lowercase:${level}}.jsonl" archiveFileName="${logDirectory}/archives/${logSourceName}-${lowercase:${level}}_${date:format=yyyy-MM-dd}.jsonl" archiveAboveSize="1000240" archiveNumbering="Sequence" archiveEvery="Day" concurrentWrites="true" keepFileOpen="true" maxArchiveFiles="1" encoding="UTF-8"> <layout xsi:type="JsonLayout" includeAllProperties="false" <!-- 修改此处 --> maxRecursionLimit="2" suppressSpaces="true"> <attribute name="timestamp" layout="${longdate}"/> <attribute name="message" layout="${message}"/> </layout> </target>
(可选)缩小日志匹配范围
如果只需要记录项目自身的日志,而非.NET框架日志,可以修改规则,指定项目命名空间前缀,并过滤框架日志:
<rules> <!-- 仅记录你的项目命名空间下的日志,替换为实际命名空间 --> <logger name="YourProjectNamespace.*" minlevel="Info" writeTo="jsonFile" /> <!-- 拒绝框架日志,避免冗余 --> <logger name="Microsoft.*" minlevel="Info" final="true" /> <logger name="System.*" minlevel="Info" final="true" /> </rules>
final="true"表示匹配后不再执行后续规则,框架日志会被直接忽略。
2. 确认代码中的日志调用
你在Action中的日志写法是正确的,保持即可:
[HttpGet("products")] public Task<object?> Get(CancellationToken cancellationToken, [FromQuery] Filter filter) { _logger.LogInformation("Hello world!"); // ... other stuff }
内容的提问来源于stack exchange,提问作者Aleksej_Shherbak
相关产品推荐
相关产品推荐

