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

如何在运行时使用NLog忽略指定日志条目?

在NLog中运行时忽略指定日志条目的正确方式

你之前用MemoryTarget配合Final=true的方法虽然能生效,但确实不够规范——没必要把不需要的日志先写入内存再丢弃。而你尝试的ConditionBasedFilter之所以会忽略所有日志,是因为LoggingRule本身已经匹配了Microsoft.*,再叠加过滤器会导致逻辑冲突,最终意外拦截了全部日志。

正确的做法是使用NLog内置的WriteToNil(空目标),直接将不需要的日志丢弃,无需额外创建无用的Target。以下是规范的实现方案:

private void SetUpLogging(string connectionString)
{
    var mongoTarget = new MongoTarget
    {
        Name = "mongolog",
        ConnectionString = connectionString,
        CollectionName = "ApiLog",
        IncludeDefaults = true,
        IncludeEventProperties = true,
        DatabaseName = "Log",
        CappedCollectionSize = 20000000
    };

    LogManager.Setup().LoadConfiguration(c =>
    {
        // 忽略Microsoft开头的、级别低于Warn的日志(直接丢弃)
        c.ForLogger("Microsoft.*").WriteToNil(LogLevel.Warn); 
        // 其他所有日志,最低级别Debug,写入MongoDB目标
        c.ForLogger().FilterMinLevel(LogLevel.Debug).WriteTo(mongoTarget);
    });
} 

方案说明:

  • ForLogger("Microsoft.*") 精准匹配所有以Microsoft开头的日志记录器
  • WriteToNil(LogLevel.Warn) 表示该规则下,低于Warn级别的日志直接被忽略(不写入任何目标);如果需要忽略所有级别的Microsoft日志,可以改成WriteToNil(LogLevel.Trace, LogLevel.Fatal)
  • 第二条规则是兜底配置,将所有未被第一条规则匹配的日志,过滤出Debug及以上级别后写入你配置的MongoTarget

这种方式既简洁高效,又符合NLog的设计规范,避免了不必要的资源消耗。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:15:13