.net core中的那些常用的日誌框架(Logging篇)
阿新 • • 發佈:2020-09-24
### 前言
>日誌,在我們每個專案中是必不可少的,它不僅能在除錯的時候測試資料,而且在專案上線,也是我們排查錯誤的得力助手,那我就能談談,用的多的幾個日誌框架吧!如果有不對的地方,歡迎來指教錯誤,謝謝!
### 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中的系統自帶的日誌框架的使用,以及如何封裝一個自己一個類,特殊處理日誌