当前位置: 首页 > news >正文

在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便于定位日志来源异常日志必须包含堆栈信息生产环境合理设置日志级别。
http://www.gsyq.cn/news/1364908.html

相关文章:

  • C# 中TaskScheduler的使用小结
  • C#项目使用obfuscar混淆实践
  • 使用C#将Excel文件转换为SVG的实现代码
  • RTX51任务调度中K_IVL与K_TMO事件详解
  • JMeter+InfluxDB+Grafana压测监控实时可视化实战
  • 高斯随机定时器原理与JMeter压测行为建模
  • PearSAN框架:基于皮尔逊相关的代理模型加速纳米光子逆向设计
  • BG3ModManager加载失败的三大底层校验机制解析
  • 英飞凌XC866评估板Flash批量编程解决方案
  • RISC-V与x86平台并行FFT性能对比研究
  • 告别体素网格!用INR(隐式神经表示)搞定医学影像超分辨率,实测Python代码分享
  • ViGEmBus:5分钟掌握Windows虚拟游戏控制器驱动终极指南
  • Unity项目中使用Roslyn Analyzers实现C#静态分析与代码规范自动化
  • 利用校准预测优化在线算法:从滑雪租赁到作业调度的实践
  • 百度网盘直链解析:技术原理与高效下载的终极指南
  • 从预测到实战:用随机森林模型回测A股策略,我踩过的这些坑你一定要避开
  • 搞定Debian APU核显驱动:AMD集成显卡在Debian 12下的完整配置与Secure Display报错解决
  • 别再只用箱线图了!用Python的LOF算法给你的数据做个‘体检’,揪出隐藏的异常值
  • 如何免费延长JetBrains IDE试用期:终极重置工具完全指南
  • 剖析不错的污泥干化机工厂,生活污泥干化机性价比哪家高 - mypinpai
  • 终极解决方案:wechat-need-web让微信网页版轻松可用
  • Burp Suite MFA插件开发实战:状态机驱动的多因素认证自动化
  • 终极Winget安装指南:5分钟解决Windows包管理器安装难题
  • 朴素贝叶斯与MLP:轻量级AI文本检测方案在创意小说领域的实践
  • 3步掌握SketchUp STL插件:实现3D打印模型转换的完整方案
  • 统信UOS 1070系统克隆实战:用自带工具给电脑做个‘替身’,换机迁移不求人
  • 别再只改源文件了!Linux内核编译时‘multiple definition’错误的隐藏Boss:备份文件覆盖机制
  • 龙蜥8.8系统下,手把手教你安全升级OpenSSH到9.7p1(附防失联指南)
  • 不只是‘找不到命令’:深入理解dpkg在Debian/Ubuntu系统中的角色与安装修复指南
  • 基于比较反馈的多目标偏好学习:从几何视角到高效算法实现