1. 程式人生 > 實用技巧 >.net core 3.1 使用nlog進行日誌記錄

.net core 3.1 使用nlog進行日誌記錄

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:當前文章我是參考了很多網上的資料,然後進行學習和總結,最後和大家分享,如果有錯誤的地方還請批評指正。

感謝:

https://www.cnblogs.com/fancyblogs/p/12924263.html

https://blog.csdn.net/fqydhk/article/details/104724445