在C#项目中使用NLog进行日志记录的方法步骤 一、整体流程核心步骤使用 NLog 的核心流程可总结为安装 NuGet 包 → 配置 NLog.config → 代码中初始化 / 使用 Logger → 验证日志输出下面分项目类型详细说明。二、控制台 / 桌面应用最基础场景步骤 1安装 NLog 包打开项目的 NuGet 包管理器安装核心包1234# .NET CLI 命令推荐dotnet add package NLog# 或 NuGet 包管理器控制台Install-Package NLog步骤 2添加 NLog.config 配置文件三、ASP.NETCore Web 应用主流场景在项目根目录新建NLog.config文件右键文件 → 属性 → 复制到输出目录 → 选择「始终复制」粘贴以下基础配置支持控制台 文件输出可直接复用12345678910111213141516171819202122232425262728?xmlversion1.0encodingutf-8?nlogxmlnshttp://www.nlog-project.org/schemas/NLog.xsdxmlns:xsihttp://www.w3.org/2001/XMLSchema-instanceautoReloadtrue!-- 配置修改后自动生效无需重启 --throwConfigExceptionstrue!-- 开发时开启配置错误抛异常 --!-- 变量定义简化重复配置 --variablenamelogDirvalue${basedir}/logs/variablenamelogLayoutvalue${longdate} | ${level:uppercasetrue} | ${logger} | ${message} ${exception:formatToString}/!-- 输出目标控制台 按天分割的文件 --targets!-- 控制台输出开发调试 --targetnameconsolexsi:typeConsolelayout${logLayout}/!-- 文件输出生产环境核心 --targetnamefilexsi:typeFilefileName${logDir}/${shortdate}.log!-- 日志路径项目目录/logs/2025-12-25.log --archiveEveryDay!-- 按天归档 --maxArchiveFiles30!-- 保留30天日志 --encodingUTF-8layout${logLayout}//targets!-- 日志规则所有Info及以上级别输出到控制台文件 --rulesloggername*minlevelInfowriteToconsole,file//rules/nlog步骤 1C# 代码中使用 NLog12345678910111213141516171819202122232425262728293031323334353637usingNLog;namespaceNLogDemo{classProgram{// 核心创建Logger推荐每个类一个用当前类名命名便于定位日志来源privatestaticreadonlyILogger _logger LogManager.GetCurrentClassLogger();staticvoidMain(string[] args){try{// 1. 输出不同级别的日志按需选择_logger.Info(程序启动成功开始执行业务逻辑);_logger.Warn(注意当前内存使用率超过80%);// 模拟业务操作var userId 1001;_logger.Info($用户 {userId} 发起查询请求);// 2. 模拟异常记录带堆栈的错误日志核心场景thrownewInvalidOperationException(数据库查询超时);}catch(Exception ex){// 第一个参数异常对象自动记录堆栈第二个参数自定义日志消息_logger.Error(ex,执行业务逻辑时发生错误);}finally{// 释放NLog资源控制台应用结束时建议调用LogManager.Shutdown();}}}}步骤 2验证效果运行程序控制台会输出日志内容查看项目输出目录如bin/Debug/net8.0/logs会生成以当天日期命名的.log文件包含完整日志。步骤 3安装适配包1dotnet add package NLog.Web.AspNetCore步骤 4配置 NLog.config复用上面的NLog.config文件无需修改直接复制到项目根目录设置「始终复制」。步骤 5Program.cs 中集成 NLog12345678910111213141516171819usingNLog;usingNLog.Web;var builder WebApplication.CreateBuilder(args);// 1. 清除.NET默认日志提供器启用NLogbuilder.Logging.ClearProviders();builder.Host.UseNLog();// 注册NLog到ASP.NET Core依赖注入// 2. 添加MVC等服务常规操作builder.Services.AddControllersWithViews();var app builder.Build();// 3. 中间件配置常规操作app.UseRouting();app.UseEndpoints(endpoints endpoints.MapControllers());app.Run();步骤 6Controller/Service 中使用通过依赖注入获取ILoggerASP.NET Core 推荐方式1234567891011121314151617181920212223242526272829303132333435363738394041usingMicrosoft.AspNetCore.Mvc;usingMicrosoft.Extensions.Logging;namespaceNLogWebDemo.Controllers{[ApiController][Route(api/[controller])]publicclassUserController : ControllerBase{// 注入ILogger泛型参数为当前类便于日志定位privatereadonlyILoggerUserController _logger;publicUserController(ILoggerUserController logger){_logger logger;}[HttpGet({id})]publicIActionResult Get(intid){// 记录普通日志_logger.LogInformation(接收到用户查询请求ID{UserId}, id);try{// 模拟业务逻辑if(id 0){thrownewArgumentException(用户ID不能为负数);}returnOk(new{ Id id, Name 张三});}catch(Exception ex){// 记录错误日志_logger.LogError(ex,查询用户信息失败ID{UserId}, id);returnBadRequest(查询失败);}}}}四、关键注意事项配置文件属性务必将NLog.config的「复制到输出目录」设为「始终复制」否则程序运行时找不到配置日志级别控制Trace/Debug开发环境调试用生产环境建议关闭配置中minlevel设为InfoInfo/Warn生产环境常规记录Error/Fatal必须记录用于排查问题异常日志规范记录错误时务必传入Exception对象否则会丢失堆栈信息无法定位问题性能优化文件日志建议开启concurrentWritestrue多线程安全keepFileOpenfalse避免文件锁定。总结核心步骤安装包 → 配置NLog.config定义输出目标 / 规则→ 代码中创建 / 注入ILogger→ 输出不同级别日志异常日志务必传Exception对象项目适配控制台应用直接用LogManager.GetCurrentClassLogger()ASP.NET Core 需集成依赖注入并调用UseNLog()关键规范每个类对应一个 Logger便于定位日志来源异常日志必须包含堆栈信息生产环境合理设置日志级别。