最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在C#項目中使用NLog進行日志記錄的方法步驟

 更新時間:2025年12月26日 09:39:57   作者:工業(yè)程序猿老趙  
這篇文章主要介紹了如何使用NLog進行日志記錄,包括安裝NuGet包、配置NLog.config文件、在代碼中使用Logger以及驗證日志輸出,文章詳細說明了在控制臺/桌面應(yīng)用和ASP.NET?Core?Web應(yīng)用中的具體步驟,并強調(diào)了關(guān)鍵注意事項,需要的朋友可以參考下

一、整體流程(核心步驟)

使用 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)用(主流場景)

  1. 在項目根目錄新建 NLog.config 文件(右鍵文件 → 屬性 → 復(fù)制到輸出目錄 → 選擇「始終復(fù)制」);
  2. 粘貼以下基礎(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:驗證效果

  1. 運行程序,控制臺會輸出日志內(nèi)容;
  2. 查看項目輸出目錄(如 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)鍵注意事項

  1. 配置文件屬性:務(wù)必將 NLog.config 的「復(fù)制到輸出目錄」設(shè)為「始終復(fù)制」,否則程序運行時找不到配置;
  2. 日志級別控制
    • 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:必須記錄,用于排查問題;
  3. 異常日志規(guī)范:記錄錯誤時務(wù)必傳入 Exception 對象,否則會丟失堆棧信息,無法定位問題;
  4. 性能優(yōu)化:文件日志建議開啟 concurrentWrites="true"(多線程安全),keepFileOpen="false"(避免文件鎖定)。

總結(jié)

  1. 核心步驟:安裝包 → 配置 NLog.config(定義輸出目標 / 規(guī)則)→ 代碼中創(chuàng)建 / 注入 ILogger → 輸出不同級別日志(異常日志務(wù)必傳 Exception 對象);
  2. 項目適配:控制臺應(yīng)用直接用 LogManager.GetCurrentClassLogger()ASP.NET Core 需集成依賴注入并調(diào)用 UseNLog();
  3. 關(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)文章

  • 詳解c# 切片語法糖

    詳解c# 切片語法糖

    這篇文章主要介紹了c# 切片語法糖的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-09-09
  • 詳解DataGridView控件的數(shù)據(jù)綁定

    詳解DataGridView控件的數(shù)據(jù)綁定

    本文詳細講解了DataGridView控件的數(shù)據(jù)綁定,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • 解析C#中@符號的幾種使用方法詳解

    解析C#中@符號的幾種使用方法詳解

    本篇文章是對C#中@符號的幾種使用方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C#操作DataGridView設(shè)置單元格只讀

    C#操作DataGridView設(shè)置單元格只讀

    這篇文章介紹了C#操作DataGridView設(shè)置單元格只讀的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • C#實現(xiàn)簡單的飛行棋小游戲

    C#實現(xiàn)簡單的飛行棋小游戲

    這篇文章主要為大家詳細介紹了C#實現(xiàn)簡單的飛行棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下<BR>
    2021-11-11
  • 使用Spire.PDF在C#中創(chuàng)建和繪制PDF表單的方法步驟

    使用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
  • C#實現(xiàn)圖片上傳與瀏覽切換的方法

    C#實現(xiàn)圖片上傳與瀏覽切換的方法

    這篇文章主要介紹了C#實現(xiàn)圖片上傳與瀏覽切換的方法,是很有實用價值的一個應(yīng)用技巧,需要的朋友可以參考下
    2014-08-08
  • C#中Dictionary泛型集合7種常見的用法

    C#中Dictionary泛型集合7種常見的用法

    本文主要介紹了Dictionary集合的7種最基礎(chǔ)的用法,包括創(chuàng)建、添加、查找、遍歷、刪除等方法,程序都是由簡入繁,希望能通過閱讀簡單的示例,給大家一些啟發(fā)。
    2016-03-03
  • Unity 如何通過反射給gameObject添加組件

    Unity 如何通過反射給gameObject添加組件

    這篇文章主要介紹了Unity 通過反射給gameObject添加組件的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • C#實現(xiàn)程序開機啟動的方法

    C#實現(xiàn)程序開機啟動的方法

    這篇文章主要介紹了C#實現(xiàn)程序開機啟動的方法,涉及C#針對應(yīng)用程序及注冊表的相關(guān)操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-06-06

最新評論

高雄市| 神池县| 聂拉木县| 花垣县| 玉林市| 沙洋县| 龙口市| 衢州市| 景泰县| 尼玛县| 垦利县| 富宁县| 海安县| 长沙市| 鄯善县| 汕尾市| 土默特右旗| 佛冈县| 岐山县| 靖江市| 安陆市| 美姑县| 皮山县| 嘉义县| 和顺县| 苏尼特右旗| 南召县| 海城市| 本溪市| 苏尼特左旗| 贵港市| 鄂州市| 拜城县| 类乌齐县| 思茅市| 吉林市| 左权县| 全州县| 云梦县| 邛崃市| 郁南县|