1. 程式人生 > >.net core中的那些常用的日誌框架(Logging篇)

.net core中的那些常用的日誌框架(Logging篇)

### 前言 >日誌,在我們每個專案中是必不可少的,它不僅能在除錯的時候測試資料,而且在專案上線,也是我們排查錯誤的得力助手,那我就能談談,用的多的幾個日誌框架吧!如果有不對的地方,歡迎來指教錯誤,謝謝! ### Asp.Net Core日誌中Logging篇 >一看這個名字,大家也能猜到,這是微軟自帶的一個日誌框架。 #### 1.1引用 ``` 建立ASP.NET Core程式,程式會自帶Microsoft.Extensions.Logging,如果沒有,請在Nuget安裝 ``` #### 1.2配置檔案 在你專案中,找到appsetting.json檔案,開啟後,如下圖: ``` { "Logging": { "LogLevel": { "Default": "Debug", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information", } }, "AllowedHosts": "*" } ``` 你肯定會很疑惑,這些配置是什麼意思,為啥要這樣寫? >appsetting.json是一個配置檔案,我們很多配置資訊,都可以寫到這個檔案中來,日誌的配置也是如此。 ``` Logging:是日誌配置的預設名稱,如果想自定義,也是可以,後面會演示 LogLevel:日誌級別(日誌的輸出是有輸出級,如下圖所示) Default:預設級別 Microsoft:系統級別 Microsoft.Hosting.Lifetime:生命時間基本 ``` ``` public enum LogLevel { //應用程式資料。 這些訊息預設情況下處於禁用狀態,並且永遠不應在生產環境中啟用。 Trace, //在開發過程中用於互動式調查的日誌。 這些日誌應該主要包含對除錯有用的資訊,並且沒有長期的資訊 Debug, //跟蹤應用程式一般流程的日誌。 這些日誌應具有長期 Information, //在應用程式流中突出顯示異常或意外事件的日誌,但不會導致應用程式執行停止。 Warning, //突出顯示由於故障而停止當前執行流的日誌。這些應表明當前活動失敗,而不是整個應用程式範圍內的失敗。 Error, //描述不可恢復的應用程式或系統崩潰或災難性事件的日誌,必須立即引起注意的故障。 Critical, //不用於編寫日誌訊息。 指定不應將日誌記錄類別 None } ``` **優先等級從上到下遞減Trace我們可以新建一個類LoggerHelper,然後把ILogger介面的中定義的方法都實現一遍,可以自己加時間,加條件過濾等。把系統的日誌框架,自己套一個殼,然後封裝起來,然後就可以為所欲為了。 ``` /// /// 日誌輔助類 ///
public class LoggerHelper { ILogger _logger; public LoggerHelper(ILogger logger) { _logger = logger; } public void LogInformation(string msg) { _logger.LogInformation(Write(msg)); } public void LogDebug(string msg) { _logger.LogDebug(Write(msg)); } public void LogError(string msg) { _logger.LogError(Write(msg)); } public void LogWarning(string msg) { _logger.LogWarning(Write(msg)); } protected string Write(string msg) { return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":" + msg; } } ``` >第一步:注入服務 ``` public void ConfigureServices(IServiceCollection services) { services.AddControllers(); services.AddTransient(); } ``` >第二步:新增建構函式 ``` private readonly LoggerHelper _logger; public WeatherForecastController(LoggerHelper logger) { _logger = logger; } ``` >第三步:呼叫服務 ``` _logger.LogInformation("LogInformation"+Guid.NewGuid().ToString("N")); _logger.LogDebug("LogDebug" + Guid.NewGuid().ToString("N")); _logger.LogWarning("LogWarning" + Guid.NewGuid().ToString("N")); _logger.LogError("LogError" + Guid.NewGuid().ToString("N")); ``` >第四步:配置日誌級別 ``` "Logging": { "LogLevel": { "Default": "Debug", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information", "LoggerHelper": "Information" }, "Console": { "IncludeScopes": true } }, ``` >第五步:效果展示 ![](https://img2020.cnblogs.com/blog/1400941/202009/1400941-20200924175750040-1648991647.png) **看到這裡是不是有疑問?** + "IncludeScopes": true是什麼意思? 答:記錄日誌的 scope 資訊, 對於 DeveloperExceptionPageMiddleware ,會在日誌中記錄 ConnectionId, RequestId, RequestPath。 + "LoggerHelper": "Information"是什麼意思? 答:LoggerHelper就是我們自定義類,設定我們自己封裝日誌的日誌級別 + 怎麼理解日誌中的資訊? ``` info: Microsoft.Hosting.Lifetime[0] Now listening on: http://localhost:5000 ``` 答:info:**日誌級別**;Microsoft.Hosting.Lifetime[0]:**日誌作用域**;Now listening on: http://localhost:5000:**日誌內容** ### 總結: >可能我這篇部落格,還是比較淺顯的,沒有深入的介紹日誌中不同作用越的日誌級別,只是以我的角度,給大家講解一下Asp.Net Core中的系統自帶的日誌框架的使用,以及如何封裝一個自己一個類,特殊處理日誌