慕林彬 發表於 2025-12-26 09:39:57

在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 包 &rarr; 配置 NLog.config &rarr; 代码中初始化 / 使用 Logger &rarr; 验证日志输出</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>在项目根目录新建&nbsp;<code>NLog.config</code>&nbsp;文件(右键文件 &rarr; 属性 &rarr; 复制到输出目录 &rarr; 选择「始终复制」);</li><li>粘贴以下基础配置(支持控制台 + 文件输出,可直接复用):</li></ol>
<div class="jb51code"><pre class="brush:xml;">&lt;?xml version="1.0" encoding="utf-8" ?&gt;
&lt;nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"&lt;!-- 配置修改后自动生效,无需重启 --&gt;
      throwConfigExceptions="true"&gt; &lt;!-- 开发时开启,配置错误抛异常 --&gt;

&lt;!-- 变量定义:简化重复配置 --&gt;
&lt;variable name="logDir" value="${basedir}/logs"/&gt;
&lt;variable name="logLayout" value="${longdate} | ${level:uppercase=true} | ${logger} | ${message} ${exception:format=ToString}"/&gt;

&lt;!-- 输出目标:控制台 + 按天分割的文件 --&gt;
&lt;targets&gt;
    &lt;!-- 控制台输出(开发调试) --&gt;
    &lt;target name="console" xsi:type="Console" layout="${logLayout}"/&gt;
    &lt;!-- 文件输出(生产环境核心) --&gt;
    &lt;target name="file" xsi:type="File"
            fileName="${logDir}/${shortdate}.log"&lt;!-- 日志路径:项目目录/logs/2025-12-25.log --&gt;
            archiveEvery="Day"&lt;!-- 按天归档 --&gt;
            maxArchiveFiles="30"&lt;!-- 保留30天日志 --&gt;
            encoding="UTF-8"
            layout="${logLayout}"/&gt;
&lt;/targets&gt;

&lt;!-- 日志规则:所有Info及以上级别输出到控制台+文件 --&gt;
&lt;rules&gt;
    &lt;logger name="*" minlevel="Info" writeTo="console,file" /&gt;
&lt;/rules&gt;
&lt;/nlog&gt;</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>查看项目输出目录(如&nbsp;<code>bin/Debug/net8.0/logs</code>),会生成以当天日期命名的&nbsp;<code>.log</code>&nbsp;文件,包含完整日志。</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>复用上面的&nbsp;<code>NLog.config</code>&nbsp;文件(无需修改,直接复制到项目根目录,设置「始终复制」)。</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 =&gt; endpoints.MapControllers());

app.Run();</pre></div>
<p class="maodian"></p><h3>步骤 6:Controller/Service 中使用</h3>
<p>通过依赖注入获取&nbsp;<code>ILogger</code>(ASP.NET&nbsp;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&lt;UserController&gt; _logger;

      public UserController(ILogger&lt;UserController&gt; logger)
      {
            _logger = logger;
      }

      
      public IActionResult Get(int id)
      {
            // 记录普通日志
            _logger.LogInformation("接收到用户查询请求,ID:{UserId}", id);

            try
            {
                // 模拟业务逻辑
                if (id &lt;= 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>:务必将&nbsp;<code>NLog.config</code>&nbsp;的「复制到输出目录」设为「始终复制」,否则程序运行时找不到配置;</li><li><strong>日志级别控制</strong>:<ul><li><code>Trace/Debug</code>:开发环境调试用,生产环境建议关闭(配置中&nbsp;<code>minlevel</code>&nbsp;设为&nbsp;<code>Info</code>);</li><li><code>Info/Warn</code>:生产环境常规记录;</li><li><code>Error/Fatal</code>:必须记录,用于排查问题;</li></ul></li><li><strong>异常日志规范</strong>:记录错误时务必传入&nbsp;<code>Exception</code>&nbsp;对象,否则会丢失堆栈信息,无法定位问题;</li><li><strong>性能优化</strong>:文件日志建议开启&nbsp;<code>concurrentWrites=&quot;true&quot;</code>(多线程安全),<code>keepFileOpen=&quot;false&quot;</code>(避免文件锁定)。</li></ol>
<p class="maodian"></p><h2>总结</h2>
<ol><li><strong>核心步骤</strong>:安装包 &rarr; 配置&nbsp;<code>NLog.config</code>(定义输出目标 / 规则)&rarr; 代码中创建 / 注入&nbsp;<code>ILogger</code>&nbsp;&rarr; 输出不同级别日志(异常日志务必传&nbsp;<code>Exception</code>&nbsp;对象);</li><li><strong>项目适配</strong>:控制台应用直接用&nbsp;<code>LogManager.GetCurrentClassLogger()</code>,ASP.NET&nbsp;Core 需集成依赖注入并调用&nbsp;<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]
查看完整版本: 在C#项目中使用NLog进行日志记录的方法步骤