Nlog相同配置在新项目无法生成日志文件问题咨询
NLog不写入文件问题排查方案
核心问题根因(优先级最高)
你提供的NLog配置存在语法结构错误,缺少根节点与必要命名空间,导致NLog无法识别加载配置,因此内部日志、业务日志均不会生成:
- XML声明后的
autoReload、internalLogLevel等属性没有归属的<nlog>根节点 - 缺少NLog必备的XML命名空间声明,配置文件格式不合法
全量排查步骤
- 替换为合法的完整配置文件,示例如下:
<?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true" internalLogLevel="Trace" internalLogFile="c:\temp\internal-nlog.txt"> <targets> <target name="file" xsi:type="File" layout="${longdate} ${logger} ${message}${exception:format=ToString}" fileName="C:\beka\logs\logfile.txt" /> <target name="exceptions" xsi:type="File" layout="${longdate} ${logger} ${message}${exception:format=ToString}" fileName="C:\beka\logs\logfileExceptions.txt" /> </targets> <rules> <logger name="*" minlevel="Trace" writeTo="file" /> <logger name="*" minlevel="Error" writeTo="exceptions" /> </rules> </nlog>
- 确认配置文件放置位置与属性:
配置文件必须放在启动项目的根目录,文件名为NLog.config(跨平台场景注意大小写),再确认「生成操作=Content」「复制到输出目录=如果较新则复制」的配置生效,编译后检查输出目录(bin/Debug、bin/Release)下存在该配置文件 - 手动强制开启内部日志排查加载错误:
在程序入口的最开头添加以下代码,强制输出内部日志,可直接定位配置加载失败的具体原因:
NLog.Common.InternalLogger.LogLevel = NLog.LogLevel.Trace; NLog.Common.InternalLogger.LogFile = @"c:\temp\internal-nlog.txt"; NLog.Common.InternalLogger.LogToConsole = true;
- 检查目录权限:
手动创建c:\temp、C:\beka\logs两个目录,确认当前运行程序的进程身份(如控制台用户、IIS应用池身份)对两个目录拥有写入权限 - 确认框架适配逻辑:
如果是ASP.NET Core/.NET 5+项目,需在Program.cs中正确注册NLog服务,示例如下:
var builder = WebApplication.CreateBuilder(args); builder.Host.UseNLog(); // 必须添加该行加载NLog配置
内容的提问来源于stack exchange,提问作者Bartosz Bogatynia Medycki
相关产品推荐
相关产品推荐

