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

在C#项目中使用NLog进行日志记录的方法步骤

一、整体流程(核心步骤)

使用 NLog 的核心流程可总结为:安装 NuGet 包 → 配置 NLog.config → 代码中初始化 / 使用 Logger → 验证日志输出,下面分项目类型详细说明。

二、控制台 / 桌面应用(最基础场景)

步骤 1:安装 NLog 包

打开项目的 NuGet 包管理器,安装核心包:

1

2

3

4

# .NET CLI 命令(推荐)

dotnet add package NLog

# 或 NuGet 包管理器控制台

Install-Package NLog

步骤 2:添加 NLog.config 配置文件

三、ASP.NETCore Web 应用(主流场景)

  1. 在项目根目录新建NLog.config文件(右键文件 → 属性 → 复制到输出目录 → 选择「始终复制」);
  2. 粘贴以下基础配置(支持控制台 + 文件输出,可直接复用):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

<?xmlversion="1.0"encoding="utf-8"?>

<nlogxmlns="http://www.nlog-project.org/schemas/NLog.xsd"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

autoReload="true"<!-- 配置修改后自动生效,无需重启 -->

throwConfigExceptions="true"><!-- 开发时开启,配置错误抛异常 -->

<!-- 变量定义:简化重复配置 -->

<variablename="logDir"value="${basedir}/logs"/>

<variablename="logLayout"value="${longdate} | ${level:uppercase=true} | ${logger} | ${message} ${exception:format=ToString}"/>

<!-- 输出目标:控制台 + 按天分割的文件 -->

<targets>

<!-- 控制台输出(开发调试) -->

<targetname="console"xsi:type="Console"layout="${logLayout}"/>

<!-- 文件输出(生产环境核心) -->

<targetname="file"xsi:type="File"

fileName="${logDir}/${shortdate}.log"<!-- 日志路径:项目目录/logs/2025-12-25.log -->

archiveEvery="Day"<!-- 按天归档 -->

maxArchiveFiles="30"<!-- 保留30天日志 -->

encoding="UTF-8"

layout="${logLayout}"/>

</targets>

<!-- 日志规则:所有Info及以上级别输出到控制台+文件 -->

<rules>

<loggername="*"minlevel="Info"writeTo="console,file"/>

</rules>

</nlog>

步骤 1:C# 代码中使用 NLog

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

usingNLog;

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:验证效果

  1. 运行程序,控制台会输出日志内容;
  2. 查看项目输出目录(如bin/Debug/net8.0/logs),会生成以当天日期命名的.log文件,包含完整日志。

步骤 3:安装适配包

1

dotnet add package NLog.Web.AspNetCore

步骤 4:配置 NLog.config

复用上面的NLog.config文件(无需修改,直接复制到项目根目录,设置「始终复制」)。

步骤 5:Program.cs 中集成 NLog

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

usingNLog;

usingNLog.Web;

var builder = WebApplication.CreateBuilder(args);

// 1. 清除.NET默认日志提供器,启用NLog

builder.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();

步骤 6:Controller/Service 中使用

通过依赖注入获取ILogger(ASP.NET Core 推荐方式):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

usingMicrosoft.AspNetCore.Mvc;

usingMicrosoft.Extensions.Logging;

namespaceNLogWebDemo.Controllers

{

[ApiController]

[Route("api/[controller]")]

publicclassUserController : ControllerBase

{

// 注入ILogger(泛型参数为当前类,便于日志定位)

privatereadonlyILogger<UserController> _logger;

publicUserController(ILogger<UserController> 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("查询失败");

}

}

}

}

四、关键注意事项

  1. 配置文件属性:务必将NLog.config的「复制到输出目录」设为「始终复制」,否则程序运行时找不到配置;
  2. 日志级别控制
    • Trace/Debug:开发环境调试用,生产环境建议关闭(配置中minlevel设为Info);
    • Info/Warn:生产环境常规记录;
    • Error/Fatal:必须记录,用于排查问题;
  3. 异常日志规范:记录错误时务必传入Exception对象,否则会丢失堆栈信息,无法定位问题;
  4. 性能优化:文件日志建议开启concurrentWrites="true"(多线程安全),keepFileOpen="false"(避免文件锁定)。

总结

  1. 核心步骤:安装包 → 配置NLog.config(定义输出目标 / 规则)→ 代码中创建 / 注入ILogger→ 输出不同级别日志(异常日志务必传Exception对象);
  2. 项目适配:控制台应用直接用LogManager.GetCurrentClassLogger(),ASP.NET Core 需集成依赖注入并调用UseNLog()
  3. 关键规范:每个类对应一个 Logger(便于定位日志来源),异常日志必须包含堆栈信息,生产环境合理设置日志级别。
http://www.cnnetsun.cn/news/2538894.html

相关文章:

  • C#使用Spire.XLS高效生成Excel图表实现数据可视化
  • 从卡方到Wishart:一份给程序员的多元统计‘升级’指南
  • JMeter接口测试工业化实践:从脚本编写到CI/CD全链路
  • 百度网盘直链解析:技术原理与高效下载的终极指南
  • 用Python和NumPy手把手推导:从协方差矩阵到信息矩阵的转换(附边缘化代码)
  • 统信UOS 1070系统克隆实战:用自带工具给电脑做个‘替身’,换机迁移不求人
  • 量子主成分分析在入侵检测中的性能评估与硬件瓶颈分析
  • 3分钟完成视频字幕提取:本地OCR工具让字幕制作效率提升500%
  • 用CUDA C++手搓LeNet推理引擎:从PyTorch导出权重到GPU加速的完整避坑指南
  • 如何彻底重置JetBrains IDE试用期?ide-eval-resetter完整指南
  • 别再抄网上报错的代码了!手把手教你用Python搞定波士顿房价预测(附数据集下载)
  • 量子机器学习在网络安全中的实践评估:从数据加载瓶颈到系统化分析框架
  • 张量网络MPS在时间序列分析中的应用:原理、性能与可解释性
  • Frida绕过安卓反调试的四层实战指南
  • 基于内幕交易数据的机器学习股价预测:SVM、随机森林与特征工程实战
  • Go语言服务注册与发现机制详解
  • 技能清单SkillsList
  • 英雄联盟智能助手Seraphine:从青铜到王者的游戏效率革命 [特殊字符]
  • 边缘计算中LLM推理优化:CLONE方案解析
  • 终极指南:如何用Universal x86 Tuning Utility解锁你的硬件隐藏性能
  • Windows 版 Open Claw 一键搭建:GitHub 28 万人验证过的效率神器,现在上车还不晚
  • 鲸震恩!DeepSeek V4 价格永久“打骨折”,网友疯狂“表白”:梁圣的恩情还不完
  • 伴随方法与自动微分:高效梯度计算的核心原理与工程实践
  • 京东抢购脚本终极指南:3步实现茅台秒杀自动化
  • 量子力学形式化工具:从演化图像、哈密顿量到测量原理的工程实践
  • 高斯过程回归在伽马射线暴光变曲线数据重建中的应用
  • OpenRA中稳定获取应用程序目录的C#实践
  • MATLAB基于3D FDTD的微带线馈矩形天线分析[用于模拟超宽带脉冲通过线馈矩形天线的传播,以计算微带结构的回波损耗参数]附Matlab代码
  • 告别混乱:如何在不同Linux发行版(openEuler/Ubuntu)和Windows上彻底卸载AWS CLI v2
  • C#中预处理器指令的实现示例