You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 13:57:29