NLog.config 是 XML 格式配置文件,用于声明式配置 NLog;需命名为 NLog.config、Build Action 为 Content、Copy to Output Directory 为 Copy always/if newer,包含 和 ,支持热重载与易维护。

NLog.config 是一个 XML 格式的配置文件,用于在 .NET 应用中声明式地配置 NLog 日志框架的行为——它不是代码,但能替代大部分手动调用 LogConfiguration API 的工作。
为什么用 NLog.config 而不是代码配置?
直接写 XML 配置更易维护、无需重新编译、支持热重载(配合 keepFileOpen="false" 和 autoReload="true"),也方便运维人员调整日志级别或输出路径。但前提是:文件名必须是 NLog.config,且 Build Action 设为 Content,Copy to Output Directory 设为 Copy always 或 Copy if newer。
NLog.config 的基本结构长什么样?
最小可用配置包含 (输出目的地)和 (日志路由逻辑)。以下是一个典型示例:
注意几个关键点:
-
autoReload="true"表示运行时修改文件后自动生效(需确保文件未被其他进程独占锁定) -
throwConfigExceptions="true"有助于快速发现 XML 语法错误或路径不可写等问题 -
${basedir}是运行目录,不是项目根目录;若要写入程序同级logs文件夹,必须存在该目录,否则日志会静默失败 中的 *是通配符,匹配所有 logger 名称(如LogManager.GetLogger("UserService"))
常见错误:日志没生成、控制台没输出、文件权限拒绝
这些往往不是 NLog 本身的问题,而是配置细节或环境导致的静默失败:
- 日志文件路径含非法字符(如
\在 XML 中需写成\\或用正斜杠/) - 目标文件夹不存在,且 NLog 默认不会自动创建多级目录(需加
createDirs="true"到) - ASP.NET Core 中未正确初始化:需在
Program.cs开头调用LogManager.LoadConfiguration("NLog.config"),否则默认走空配置 - 使用
Microsoft.Extensions.Logging集成时,NLog.config仍有效,但ILogger的日志级别受appsettings.json中"Logging:LogLevel:Default"影响,可能过滤掉低级别日志
最常被忽略的是:NLog 不报错也不写日志,常常是因为目标路径不可写,或 NLog.config 没复制到输出目录。建议首次调试时启用内部日志:nlog internalLogFile="nlog-internal.log",它会告诉你到底卡在哪一步。










