Asp.Net Core中使用NLog記錄日誌

2019-11-04   日行四善

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