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

C# NLog无输出问题排查:代码配置为何不生效?

问题排查与解决

1. 日志器名称与规则不匹配

NLog的日志规则是按日志器名称匹配的,如果获取日志器时用的名称和规则里定义的不对应,规则根本不会生效。比如你规则里指定的是"FileConsoleLogger",但代码里用LogManager.GetCurrentClassLogger()(默认用类全名当日志器名称),这时候规则对这个日志器无效,自然IsInfoEnabled会是false。

解决:获取日志器时明确指定规则对应的名称,比如:

var fileConsoleLogger = LogManager.GetLogger("FileConsoleLogger");
var memoryLogger = LogManager.GetLogger("MemoryOnlyLogger");

2. 配置未应用到LogManager

代码创建完NLog配置对象后,必须赋值给LogManager.Configuration,否则配置不会生效,NLog会用默认的全局配置(默认级别可能是Warn及以上,Info会被过滤)。

示例完整配置代码:

// 创建日志目标
var consoleTarget = new ConsoleTarget("consoleTarget");
var fileTarget = new FileTarget("fileTarget")
{
    FileName = "${basedir}/logs/app_${shortdate}.log",
    Layout = "${longdate} ${level} ${logger} ${message}"
};
var memoryTarget = new MemoryTarget("memoryTarget");

// 创建日志规则:指定日志器名称、最低级别、关联目标
var fileConsoleRule = new LoggingRule("FileConsoleLogger", LogLevel.Info, consoleTarget, fileTarget);
var memoryRule = new LoggingRule("MemoryOnlyLogger", LogLevel.Info, memoryTarget);

// 组装配置并应用
var config = new LoggingConfiguration();
config.AddTarget(consoleTarget);
config.AddTarget(fileTarget);
config.AddTarget(memoryTarget);
config.LoggingRules.Add(fileConsoleRule);
config.LoggingRules.Add(memoryRule);

// 关键步骤:将配置绑定到NLog全局管理器
LogManager.Configuration = config;

3. 全局日志级别被限制

检查LogManager.GlobalThreshold的值,如果它被设置为LogLevel.Warn或更高级别,会全局过滤掉Info及以下的日志,导致IsInfoEnabled为false。

解决:确保全局阈值不高于Info级别:

LogManager.GlobalThreshold = LogLevel.Trace; // 或者直接设为LogLevel.Info

4. 日志器被手动设置了级别覆盖

如果代码里给日志器设置了OverrideMinLevel,比如:

fileConsoleLogger.OverrideMinLevel = LogLevel.Warn;

这会覆盖规则里的级别设置,导致Info日志被禁用,IsInfoEnabled为false。

解决:检查代码中是否有类似设置,移除或调整为合适级别。

5. 规则的级别范围设置错误

确认日志规则的最低级别是LogLevel.Info,而不是LogLevel.Warn或更高。另外不要误设LoggingRule的Final属性为true(除非明确需要阻断后续规则),避免影响当前规则的生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:31:07