Asp.Net Core 3.0,+NLog 4.6.7,+NLog.Web.AspNetCore 4.9.0
摘要:NLog在asp.net網站中的使用,NLog日誌寫入資料庫,NLog日誌寫入文件
案例代碼
需求#
1.日誌自動寫入到資料庫、寫入到文件
2.appsettings.json資料庫連接更改後,不需要去改NLog中的連接地址,啟動網站或項目時自動檢測變動然後去更改,以appsettings.json為準,保持同步。
3.寫入日誌時,除了NLog自帶的欄位,新增LogType自定義欄位記錄日誌類型,例如網站日誌、中間件日誌等
4.統一的寫日誌方法,不用每次get一個logger對象(或依賴注入)來記日誌
安裝包#
在nuget中安裝NLog和NLog.Web.AspNetCore ,這兩個是NLog相關的包。
還需要安裝NLog寫入資料庫的資料庫適配器,我這裡寫入到MySQL資料庫,所以安裝MySql.Data
如果是寫入到SQL server資料庫,需要安裝Microsoft.Data.SqlClient
NLog.config#
配置文件內容#
網站根目錄下新建NLog.config配置文件,記得右擊該文件「屬性」,複製到輸出目錄:「始終複製」
NLog.config文件內容:
配置文件解讀#
- nlog根節點: autoReload屬性,true時,如果NLog.config文件有變動,會自動應用新配置(但是會有延遲,過幾秒才會應用起來) internalLogLevel屬性,設定後,輸出的是NLog內部自己的日誌記錄,如果遇到NLog異常/配置文件沒配好,可以把Off改為Trace或Debug來查看NlogRecords.log里的內容 internalLogFile屬性,可以設定路徑,例如默認的c:\\temp\\nlog-internal.log
- 新增了extensions節點,因為引用了NLog.Web.AspNetCore包
- targets節點中是各種記錄方式的配置
- 第一個target節點,可以看到name是log_database,這裡的name和下方logger中writeTo屬性對應 xsi:type="Database",就是寫入資料庫了 dbProvider屬性是資料庫適配器,MySQL是MySql.Data.MySqlClient.MySqlConnection, MySql.Data,SQL server是Microsoft.Data.SqlClient,其他資料庫適配器可在官方文檔內查看 connectionString即連接字符串了 commandText子節點是插入資料庫時insert語句,可以看到我這裡是寫入到TblLogrecords表,表結構下文會展示出來 parameter子節點是insert語句的各個參數: 有個name="@LogType"參數,layout="${event-properties:item=LogType}",表示@LogType參數的值從event-properties中的LogType中取,這個後文會寫到用法 其餘參數均是NLog自帶的內容,aspnet-開頭的是NLog.Web.AspNetCore包中提供的方法 layout render官方文檔
- 第二個target節點,可以看到name是log_file,這裡的name和下方logger中writeTo屬性對應 xsi:type="File",即寫入到文件 fileName屬性是文件名,這裡是寫入到當前目錄下的logs文件夾,並且按日期歸檔 layout屬性是寫入日誌的格式
- rules節點是各個日誌記錄器logger的配置 第一個logger配置跳過所有Microsoft組件的日誌記錄,final 標記當前規則為最後一個規則。其後的規則即時匹配也不會被運行。 第二個logger name="logdb",該日誌記錄器名為logdb,是適配log_database規則,即寫入資料庫,如果要適配多條規則,用逗號隔開 其餘規則可以參考博客
資料庫配置#
數據表結構#
這裡資料庫為TestNLog:
網站配置連接#
appsettings.json中增加ConectionStrings節點:
統一日誌記錄方法#
網站下新建CommonUtils文件夾,添加NLogUtil.cs文件(包含LogType定義):
配置NLog依賴注入#
網站Program.cs文件中,在CreateHostBuilder方法中添加以下內容:
完成後如下圖所示:
啟動項目同步連接字符串#
修改網站啟動Program.cs中的邏輯:
修改完成後,如下圖所示:
啟動驗證#
啟動項目,可以正常記錄日誌到資料庫和文件:
作者: kasnti
原文地址:https://www.cnblogs.com/kasnti/p/11748306.html