在C#项目中使用NLog进行日志记录的方法步骤
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>一、整体流程(核心步骤)</li><li>二、控制台 / 桌面应用(最基础场景)</li><ul class="second_class_ul"><li>步骤 1:安装 NLog 包</li><li>步骤 2:添加 NLog.config 配置文件</li></ul><li>三、ASP.NETCore Web 应用(主流场景)</li><ul class="second_class_ul"><li>步骤 1:C# 代码中使用 NLog</li><li>步骤 2:验证效果</li><li>步骤 3:安装适配包</li><li>步骤 4:配置 NLog.config</li><li>步骤 5:Program.cs 中集成 NLog</li><li>步骤 6:Controller/Service 中使用</li></ul><li>四、关键注意事项</li><ul class="second_class_ul"></ul><li>总结</li><ul class="second_class_ul"></ul></ul></div><p class="maodian"></p><h2>一、整体流程(核心步骤)</h2><p>使用 NLog 的核心流程可总结为:<strong>安装 NuGet 包 → 配置 NLog.config → 代码中初始化 / 使用 Logger → 验证日志输出</strong>,下面分项目类型详细说明。</p>
<p class="maodian"></p><h2>二、控制台 / 桌面应用(最基础场景)</h2>
<p class="maodian"></p><h3>步骤 1:安装 NLog 包</h3>
<p>打开项目的 NuGet 包管理器,安装核心包:</p>
<div class="jb51code"><pre class="brush:bash;"># .NET CLI 命令(推荐)
dotnet add package NLog
# 或 NuGet 包管理器控制台
Install-Package NLog</pre></div>
<p class="maodian"></p><h3>步骤 2:添加 NLog.config 配置文件</h3>
<p class="maodian"></p><h2>三、ASP.NETCore Web 应用(主流场景)</h2>
<ol><li>在项目根目录新建 <code>NLog.config</code> 文件(右键文件 → 属性 → 复制到输出目录 → 选择「始终复制」);</li><li>粘贴以下基础配置(支持控制台 + 文件输出,可直接复用):</li></ol>
<div class="jb51code"><pre class="brush: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"<!-- 配置修改后自动生效,无需重启 -->
throwConfigExceptions="true"> <!-- 开发时开启,配置错误抛异常 -->
<!-- 变量定义:简化重复配置 -->
<variable name="logDir" value="${basedir}/logs"/>
<variable name="logLayout" value="${longdate} | ${level:uppercase=true} | ${logger} | ${message} ${exception:format=ToString}"/>
<!-- 输出目标:控制台 + 按天分割的文件 -->
<targets>
<!-- 控制台输出(开发调试) -->
<target name="console" xsi:type="Console" layout="${logLayout}"/>
<!-- 文件输出(生产环境核心) -->
<target name="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>
<logger name="*" minlevel="Info" writeTo="console,file" />
</rules>
</nlog></pre></div>
<p class="maodian"></p><h3>步骤 1:C# 代码中使用 NLog</h3>
<div class="jb51code"><pre class="brush:csharp;">using NLog;
namespace NLogDemo
{
class Program
{
// 核心:创建Logger(推荐每个类一个,用当前类名命名,便于定位日志来源)
private static readonly ILogger _logger = LogManager.GetCurrentClassLogger();
static void Main(string[] args)
{
try
{
// 1. 输出不同级别的日志(按需选择)
_logger.Info("程序启动成功,开始执行业务逻辑");
_logger.Warn("注意:当前内存使用率超过80%");
// 模拟业务操作
var userId = 1001;
_logger.Info($"用户 {userId} 发起查询请求");
// 2. 模拟异常,记录带堆栈的错误日志(核心场景)
throw new InvalidOperationException("数据库查询超时");
}
catch (Exception ex)
{
// 第一个参数:异常对象(自动记录堆栈);第二个参数:自定义日志消息
_logger.Error(ex, "执行业务逻辑时发生错误");
}
finally
{
// 释放NLog资源(控制台应用结束时建议调用)
LogManager.Shutdown();
}
}
}
}</pre></div>
<p class="maodian"></p><h3>步骤 2:验证效果</h3>
<ol><li>运行程序,控制台会输出日志内容;</li><li>查看项目输出目录(如 <code>bin/Debug/net8.0/logs</code>),会生成以当天日期命名的 <code>.log</code> 文件,包含完整日志。</li></ol>
<p class="maodian"></p><h3>步骤 3:安装适配包</h3>
<div class="jb51code"><pre class="brush:csharp;">dotnet add package NLog.Web.AspNetCore</pre></div>
<p class="maodian"></p><h3>步骤 4:配置 NLog.config</h3>
<p>复用上面的 <code>NLog.config</code> 文件(无需修改,直接复制到项目根目录,设置「始终复制」)。</p>
<p class="maodian"></p><h3>步骤 5:Program.cs 中集成 NLog</h3>
<div class="jb51code"><pre class="brush:csharp;">using NLog;
using NLog.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();</pre></div>
<p class="maodian"></p><h3>步骤 6:Controller/Service 中使用</h3>
<p>通过依赖注入获取 <code>ILogger</code>(ASP.NET Core 推荐方式):</p>
<div class="jb51code"><pre class="brush:csharp;">using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
namespace NLogWebDemo.Controllers
{
")]
public class UserController : ControllerBase
{
// 注入ILogger(泛型参数为当前类,便于日志定位)
private readonly ILogger<UserController> _logger;
public UserController(ILogger<UserController> logger)
{
_logger = logger;
}
public IActionResult Get(int id)
{
// 记录普通日志
_logger.LogInformation("接收到用户查询请求,ID:{UserId}", id);
try
{
// 模拟业务逻辑
if (id <= 0)
{
throw new ArgumentException("用户ID不能为负数");
}
return Ok(new { Id = id, Name = "张三" });
}
catch (Exception ex)
{
// 记录错误日志
_logger.LogError(ex, "查询用户信息失败,ID:{UserId}", id);
return BadRequest("查询失败");
}
}
}
}</pre></div>
<p class="maodian"></p><h2>四、关键注意事项</h2>
<ol><li><strong>配置文件属性</strong>:务必将 <code>NLog.config</code> 的「复制到输出目录」设为「始终复制」,否则程序运行时找不到配置;</li><li><strong>日志级别控制</strong>:<ul><li><code>Trace/Debug</code>:开发环境调试用,生产环境建议关闭(配置中 <code>minlevel</code> 设为 <code>Info</code>);</li><li><code>Info/Warn</code>:生产环境常规记录;</li><li><code>Error/Fatal</code>:必须记录,用于排查问题;</li></ul></li><li><strong>异常日志规范</strong>:记录错误时务必传入 <code>Exception</code> 对象,否则会丢失堆栈信息,无法定位问题;</li><li><strong>性能优化</strong>:文件日志建议开启 <code>concurrentWrites="true"</code>(多线程安全),<code>keepFileOpen="false"</code>(避免文件锁定)。</li></ol>
<p class="maodian"></p><h2>总结</h2>
<ol><li><strong>核心步骤</strong>:安装包 → 配置 <code>NLog.config</code>(定义输出目标 / 规则)→ 代码中创建 / 注入 <code>ILogger</code> → 输出不同级别日志(异常日志务必传 <code>Exception</code> 对象);</li><li><strong>项目适配</strong>:控制台应用直接用 <code>LogManager.GetCurrentClassLogger()</code>,ASP.NET Core 需集成依赖注入并调用 <code>UseNLog()</code>;</li><li><strong>关键规范</strong>:每个类对应一个 Logger(便于定位日志来源),异常日志必须包含堆栈信息,生产环境合理设置日志级别。</li></ol>
<p>以上就是在C#项目中使用NLog进行日志记录的方法步骤的详细内容,更多关于C# NLog进行日志记录的资料请关注琼殿技术社区其它相关文章!</p>
<div class="art_xg">
<b>您可能感兴趣的文章:</b><ul><li>C#中使用NLog库进行日志记录的流程详解</li><li>C#快速配置NLog日志的教程详解</li><li>c# 引用Nlog插件的步骤</li></ul>
</div>
</div>
<!--endmain-->
頁:
[1]