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

NLog 5.0 过滤Microsoft.Extensions.Logging日志不生效问题

问题根因

过滤规则失效由两个核心配置问题导致:

  • NLog通配符匹配逻辑不匹配:升级到.NET 6时一般会同步升级NLog.Web.AspNetCore依赖,新版本NLog中单星号*仅能匹配不包含.的单级命名空间段,无法匹配Microsoft.Extensions.Http.Logging、Microsoft.AspNetCore.Authentication.JwtBearer、System.Net.Http.HttpClient这类多级命名空间的日志分类名。你配置的Microsoft.*、System.Net.Http.*规则完全没有命中目标日志,这些Info级日志直接落到最后一条全局*规则中被写入文件。
    *注意:*日志中打印的类名是${callsite}渲染出的调用栈类名,不是NLog用来匹配路由规则的日志分类名(Logger Name),二者不一致很容易造成配置误判。
  • NLog注册时机错误引发配置冲突:你把UseNLog()放在了ConfigureWebHostDefaults委托内部,该时机晚于ConfigureLogging阶段的执行,导致之前设置的SetMinimumLevel(LogLevel.Warning)被NLog默认的全局Info级别覆盖,所有Info级系统日志都会被送到NLog路由层,没有被前置过滤。
修复方案

修正Program.cs的NLog注册逻辑

将NLog注册挪到Host根级配置,移除冗余的全局最低级别设置,过滤逻辑完全交给NLog管理,避免配置冲突,修正后代码如下:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureLogging(logging =>
        {
            logging.ClearProviders();
            // 移除SetMinimumLevel配置,级别过滤完全由NLog规则控制
        })
        .UseNLog() // NLog注册提升到Host层面,保证主机启动早期的日志也能被正确过滤
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder
                .UseUrls("http://*:8282")
                .UseStartup<Startup>();
                // 移除此处原有的UseNLog()调用
        });

修正nlog.config的路由规则

将单星号通配符替换为双星号**(双星号可匹配包含.在内的任意字符,覆盖所有子级命名空间),简化系统日志过滤规则,修正后的rules节点如下:

<rules>
    <!-- 匹配所有Microsoft开头的多级命名空间日志,低于Warn级别直接丢弃,不再走后续规则 -->
    <logger name="Microsoft.**" finalMinLevel="Warn" />
    <!-- 匹配所有System开头的多级命名空间日志,覆盖System.Net.Http等所有系统日志分类 -->
    <logger name="System.**" finalMinLevel="Warn" />

    <logger name="*" minlevel="Info" writeTo="logfile" />
</rules>

可选验证操作

如果需要确认日志分类名匹配情况,可以临时在NLog的layout变量中加入${logger}字段,打印每条日志的真实分类名,排查是否存在漏匹配的分类:

<variable name="verbose" value="${longdate} ${uppercase:${level}} ${logger} ${callsite:className=true:fileName=false:includeSourcePath=false:methodName=true:cleanNamesOfAnonymousDelegates=false:skipFrames=0} ${message}" />

配置生效后即可直观看到每条日志对应的分类,确认规则覆盖范围。


内容的提问来源于stack exchange,提问作者JPelletier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 07:12:52