上一篇已經介紹了 ASP.NET Core 內艦之 Logger 的簡單使用,那接下來就要進階一點了
來介紹一下 ASP.NET Core 內建之 Logger 如何透過設定檔來設定 Log 層級等相關組態與將 Log 輸出到不同地方
首先先來看要如何設定 Log 層級,在一般沒有任何設定也就是預設的情況下,預設 Log 層級是 Information,所以會在 Console 中顯示除了 Trace 和 Debug 以外所有的訊息,如下圖紅框顯示
如果我們想要設定只有 Warning 以上才顯示,最簡單的方式就是直接在 Program.cs
的 BuildWebHost
方法中加入 ConfigureLogging()
設定
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureLogging(logging => logging.SetMinimumLevel(LogLevel.Warning))
.Build();
這樣最低 Log 層級就會被設為 Warning 以上
但是如果每次要更改 Log 層級都要修改程式碼,這樣也太擾人了,所以其實它還支援其他方式進行設定,包括透過設定檔的方式,設定方式如下:
預設就已經會讀取 appsettings.json
中的 Logging
區段設定組態
除此之外還可以透過設定來進行 Log Filter 功能,這邊以appsettins.json為範例說明
{
"Logging": {
"Debug": {
"LogLevel": {
"Default": "Information"
}
},
"Console": {
"IncludeScopes": false,
"LogLevel": {
"Microsoft.AspNetCore.Hosting.Internal.WebHost": "Warning",
"Microsoft.AspNetCore.Mvc.*": "Warning",
"System.*": "Critical",
"Default": "Warning"
}
},
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}
在 Logging 區段中,分為 Debug、Console、LogLevel 三個,一一來說明
Debug 區段,Debug 在這邊代表的是輸出到 Debug Provider 中,有可能是 Debug 視窗或是 Debug 指定的容器
Console 區段,Console 在這邊代表的是輸出到 Console 中
LogLevel 用來設定相關紀錄層級
LogLevel 區段,假設上面都不符合的話,會套用到此條件
NOTE: 若 namespace 無 * 時,namespace 必須完全符合才會觸發規則
NOTE: 若都無指定時,預設 Log Filter 為記錄 Debug 以上所有 Log
若要修改設定所存放之地方,可以於 Program.cs
中的 CreateWebHostBuilder
,加上 ConfigureLogging
相關設定,以下面為例,就是從 CustomLogging
區段中讀取 Log 設定
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging((hostContext, logging)=>
{
hostContext.Configuration.GetSection("CustomLogging");
})
.UseStartup<Startup>();
}
也可以從其他檔案中讀取相關設定
最後來介紹要如何把 Log 輸出到不同的地方
ASP.NET Core 內建以下 Provider:
也有第三方提供者,參考:https://bit.ly/2zmZpRO
使用方式其實很簡單,只要在 Program.cs
中的 CreateWebHostBuilder
,加上 ConfigureLogging
相關設定
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging((hostContext, logging)=>
{
// Console
logging.AddConsole();
// Debug
logging.AddDebug();
// Event Source
logging.AddEventSourceLogger();
// Event Log
logging.AddEventLog();
// Azure App Service
logging.AddAzureWebAppDiagnostics();
})
.UseStartup<Startup>();
}
ASP.NET Core 內建 Logging 就介紹到此,下一篇將介紹使用 Elamh 來進行紀錄