在C#項目中使用NLog進行日志記錄的方法步驟
一、整體流程(核心步驟)
使用 NLog 的核心流程可總結(jié)為:安裝 NuGet 包 → 配置 NLog.config → 代碼中初始化 / 使用 Logger → 驗證日志輸出,下面分項目類型詳細說明。
二、控制臺 / 桌面應(yīng)用(最基礎(chǔ)場景)
步驟 1:安裝 NLog 包
打開項目的 NuGet 包管理器,安裝核心包:
# .NET CLI 命令(推薦) dotnet add package NLog # 或 NuGet 包管理器控制臺 Install-Package NLog
步驟 2:添加 NLog.config 配置文件
三、ASP.NETCore Web 應(yīng)用(主流場景)
- 在項目根目錄新建
NLog.config文件(右鍵文件 → 屬性 → 復(fù)制到輸出目錄 → 選擇「始終復(fù)制」); - 粘貼以下基礎(chǔ)配置(支持控制臺 + 文件輸出,可直接復(fù)用):
<?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"> <!-- 開發(fā)時開啟,配置錯誤拋異常 -->
<!-- 變量定義:簡化重復(fù)配置 -->
<variable name="logDir" value="${basedir}/logs"/>
<variable name="logLayout" value="${longdate} | ${level:uppercase=true} | ${logger} | ${message} ${exception:format=ToString}"/>
<!-- 輸出目標:控制臺 + 按天分割的文件 -->
<targets>
<!-- 控制臺輸出(開發(fā)調(diào)試) -->
<target name="console" xsi:type="Console" layout="${logLayout}"/>
<!-- 文件輸出(生產(chǎn)環(huán)境核心) -->
<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>
<!-- 日志規(guī)則:所有Info及以上級別輸出到控制臺+文件 -->
<rules>
<logger name="*" minlevel="Info" writeTo="console,file" />
</rules>
</nlog>步驟 1:C# 代碼中使用 NLog
using NLog;
namespace NLogDemo
{
class Program
{
// 核心:創(chuàng)建Logger(推薦每個類一個,用當(dāng)前類名命名,便于定位日志來源)
private static readonly ILogger _logger = LogManager.GetCurrentClassLogger();
static void Main(string[] args)
{
try
{
// 1. 輸出不同級別的日志(按需選擇)
_logger.Info("程序啟動成功,開始執(zhí)行業(yè)務(wù)邏輯");
_logger.Warn("注意:當(dāng)前內(nèi)存使用率超過80%");
// 模擬業(yè)務(wù)操作
var userId = 1001;
_logger.Info($"用戶 {userId} 發(fā)起查詢請求");
// 2. 模擬異常,記錄帶堆棧的錯誤日志(核心場景)
throw new InvalidOperationException("數(shù)據(jù)庫查詢超時");
}
catch (Exception ex)
{
// 第一個參數(shù):異常對象(自動記錄堆棧);第二個參數(shù):自定義日志消息
_logger.Error(ex, "執(zhí)行業(yè)務(wù)邏輯時發(fā)生錯誤");
}
finally
{
// 釋放NLog資源(控制臺應(yīng)用結(jié)束時建議調(diào)用)
LogManager.Shutdown();
}
}
}
}步驟 2:驗證效果
- 運行程序,控制臺會輸出日志內(nèi)容;
- 查看項目輸出目錄(如
bin/Debug/net8.0/logs),會生成以當(dāng)天日期命名的.log文件,包含完整日志。
步驟 3:安裝適配包
dotnet add package NLog.Web.AspNetCore
步驟 4:配置 NLog.config
復(fù)用上面的 NLog.config 文件(無需修改,直接復(fù)制到項目根目錄,設(shè)置「始終復(fù)制」)。
步驟 5:Program.cs 中集成 NLog
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等服務(wù)(常規(guī)操作) builder.Services.AddControllersWithViews(); var app = builder.Build(); // 3. 中間件配置(常規(guī)操作) app.UseRouting(); app.UseEndpoints(endpoints => endpoints.MapControllers()); app.Run();
步驟 6:Controller/Service 中使用
通過依賴注入獲取 ILogger(ASP.NET Core 推薦方式):
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
namespace NLogWebDemo.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class UserController : ControllerBase
{
// 注入ILogger(泛型參數(shù)為當(dāng)前類,便于日志定位)
private readonly ILogger<UserController> _logger;
public UserController(ILogger<UserController> logger)
{
_logger = logger;
}
[HttpGet("{id}")]
public IActionResult Get(int id)
{
// 記錄普通日志
_logger.LogInformation("接收到用戶查詢請求,ID:{UserId}", id);
try
{
// 模擬業(yè)務(wù)邏輯
if (id <= 0)
{
throw new ArgumentException("用戶ID不能為負數(shù)");
}
return Ok(new { Id = id, Name = "張三" });
}
catch (Exception ex)
{
// 記錄錯誤日志
_logger.LogError(ex, "查詢用戶信息失敗,ID:{UserId}", id);
return BadRequest("查詢失敗");
}
}
}
}四、關(guān)鍵注意事項
- 配置文件屬性:務(wù)必將
NLog.config的「復(fù)制到輸出目錄」設(shè)為「始終復(fù)制」,否則程序運行時找不到配置; - 日志級別控制:
Trace/Debug:開發(fā)環(huán)境調(diào)試用,生產(chǎn)環(huán)境建議關(guān)閉(配置中minlevel設(shè)為Info);Info/Warn:生產(chǎn)環(huán)境常規(guī)記錄;Error/Fatal:必須記錄,用于排查問題;
- 異常日志規(guī)范:記錄錯誤時務(wù)必傳入
Exception對象,否則會丟失堆棧信息,無法定位問題; - 性能優(yōu)化:文件日志建議開啟
concurrentWrites="true"(多線程安全),keepFileOpen="false"(避免文件鎖定)。
總結(jié)
- 核心步驟:安裝包 → 配置
NLog.config(定義輸出目標 / 規(guī)則)→ 代碼中創(chuàng)建 / 注入ILogger→ 輸出不同級別日志(異常日志務(wù)必傳Exception對象); - 項目適配:控制臺應(yīng)用直接用
LogManager.GetCurrentClassLogger(),ASP.NET Core 需集成依賴注入并調(diào)用UseNLog(); - 關(guān)鍵規(guī)范:每個類對應(yīng)一個 Logger(便于定位日志來源),異常日志必須包含堆棧信息,生產(chǎn)環(huán)境合理設(shè)置日志級別。
以上就是在C#項目中使用NLog進行日志記錄的方法步驟的詳細內(nèi)容,更多關(guān)于C# NLog進行日志記錄的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解DataGridView控件的數(shù)據(jù)綁定
本文詳細講解了DataGridView控件的數(shù)據(jù)綁定,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-02-02
使用Spire.PDF在C#中創(chuàng)建和繪制PDF表單的方法步驟
在日常開發(fā)中,我們經(jīng)常需要處理各種文檔,其中PDF因其跨平臺、安全性高而成為企業(yè)級應(yīng)用中不可或缺的一部分,然而,手動創(chuàng)建、填寫或管理PDF表單無疑是一項耗時且易出錯的任務(wù),所以本文給大家介紹了如何使用Spire.PDF在C#中創(chuàng)建和繪制 PDF 表單,需要的朋友可以參考下2025-08-08

