NLog.config是什么 如何用它来配置.NET的日志记录

7次阅读

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

NLog.config是什么 如何用它来配置.NET的日志记录

NLog.config 是一个 XML 格式的配置文件,用于在 .net 应用中声明式地配置 NLog 日志框架的行为——它不是代码,但能替代大部分手动调用 LogConfiguration API 的工作。

为什么NLog.config 而不是代码配置?

直接写 XML 配置更易维护、无需重新编译、支持热重载(配合 keepFileOpen="false"autoReload="true"),也方便运维人员调整日志级别或输出路径。但前提是:文件名必须是 NLog.config,且 Build Action 设为 ContentCopy to Output Directory 设为 Copy alwaysCopy 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",它会告诉你到底卡在哪一步。

text=ZqhQzanResources