.net core 3.1 使用nlog進行日誌記錄
阿新 • • 發佈:2020-08-16
1、新增NuGet
NLog.Web.AspNetCore
2、Program.cs 注入, UseNLog()
1 public static IHostBuilder CreateHostBuilder(string[] args) => 2 Host.CreateDefaultBuilder(args) 3 .ConfigureWebHostDefaults(webBuilder => 4 { 5 webBuilder.UseStartup<Startup>();6 }).UseNLog();// 新增這句 注入nlog;
3、建立nlog.config
PS:這個是比較簡單的版本,更復雜的資訊大家自己研究
1 <?xml version="1.0" encoding="utf-8"?> 2 <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true" internalLogLevel="Info"> 3 <!--啟用.net core的核心佈局渲染器 --> 4 <extensions> 5 <add assembly="NLog.Web.AspNetCore" /> 6 </extensions> 7 <!-- 寫入日誌的目標配置 --> 8 <targets> 9 <!-- 除錯 --> 10 <target xsi:type="File" name="debug" fileName="logs/debug-${shortdate}.log"layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" /> 11 <!-- 警告 --> 12 <target xsi:type="File" name="warn" fileName="logs/warn-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" /> 13 <!-- 錯誤 --> 14 <target xsi:type="File" name="error" fileName="logs/error-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" /> 15 </targets> 16 <!-- 對映規則 --> 17 <rules> 18 <!-- 除錯 --> 19 <logger name="*" minlevel="Trace" maxlevel="Debug" writeTo="debug" /> 20 <!--跳過不重要的微軟日誌--> 21 <logger name="Microsoft.*" maxlevel="Info" final="true" /> 22 <!-- 警告 --> 23 <logger name="*" minlevel="Info" maxlevel="Warn" writeTo="warn" /> 24 <!-- 錯誤 --> 25 <logger name="*" minlevel="Error" maxlevel="Fatal" writeTo="error" /> 26 </rules> 27 </nlog>
4、使用
1 public NLog.Logger log = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger(); 2 3 log.Info("這是一個Info"); 4 log.Error(new Exception(), "這是一個Exception"); 5 log.Debug("這是一個Debug");
此處說明下,參考其他的示例,在控制器中有通過建構函式方式注入的,如下所示:
1 /// <summary> 2 ///使用者資訊 3 ///Print.Y 4 /// </summary> 5 [Route("api/[controller]/[action]")] 6 [ApiController] 7 public class UserController : BaseController 8 { 9 /// <summary> 10 /// 日誌 11 /// </summary> 12 private readonly ILogger<UserController> _logger; 13 14 /// <summary> 15 /// 建構函式 16 /// </summary> 17 /// <param name="logger"></param> 18 public UserController(ILogger<UserController> logger) 19 { 20 _logger = logger; 21 } 22 }
但是在使用的時候我發現,通過這種方式注入的,使用的是“Microsoft.Extensions.Logging”,並不是NLog,在使用上有個小問題:
大家可以看到,並不能直接記錄Exception ,因為沒有一個引數且型別為“Exception”的過載,當然可以通過封裝來實現,這裡就不槓了... 個人比較喜歡用最上面的方式來進行nlog物件的例項化,然後進行使用。
5、日誌目錄
根據config中的配置,不同等級的資訊存在不同的.log檔案中,開啟一個異常日誌內容如下:
資訊顯示還是比較全的,異常資訊內容以及異常所在的controller action 以及行數都明確顯示。
PS:當前文章我是參考了很多網上的資料,然後進行學習和總結,最後和大家分享,如果有錯誤的地方還請批評指正。
感謝: