[IT 鐵人賽] ASP.NET Core 與 Log 紀錄和追蹤的愛恨交織 - Day 03 - ASP.NET Core 內建之 Logger 02
![[IT 鐵人賽] ASP.NET Core 與 Log 紀錄和追蹤的愛恨交織 - Day 03 - ASP.NET Core 內建之 Logger 02](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1776070422200%2Fbec68388-3c79-4c8d-b277-e6b4ae175891.png&w=3840&q=75)
.NET Core Logging- Logging in ASP.NET Core 02
上一篇已經介紹了 ASP.NET Core 內艦之 Logger 的簡單使用,那接下來就要進階一點了
來介紹一下 ASP.NET Core 內建之 Logger 如何透過設定檔來設定 Log 層級等相關組態與將 Log 輸出到不同地方
首先先來看要如何設定 Log 層級,在一般沒有任何設定也就是預設的情況下,預設 Log 層級是 Information,所以會在 Console 中顯示除了 Trace 和 Debug 以外所有的訊息,如下圖紅框顯示

如果我們想要設定只有 Warning 以上才顯示,最簡單的方式就是直接在 Program.cs 的 BuildWebHost 方法中加入 ConfigureLogging() 設定
這樣最低 Log 層級就會被設為 Warning 以上
但是如果每次要更改 Log 層級都要修改程式碼,這樣也太擾人了,所以其實它還支援其他方式進行設定,包括透過設定檔的方式,設定方式如下:
- 檔案格式 (INI、JSON 及 XML)。
- 命令列引數。
- 環境變數。
- 記憶體內部 .NET 物件。
- 未加密的祕密管理員儲存體。
- 類似 Azure Key Vault 的加密使用者存放區。
- 自訂提供者 (已安裝或已建立)。
預設就已經會讀取 appsettings.json中的 Logging區段設定組態
除此之外還可以透過設定來進行 Log Filter 功能,這邊以appsettins.json為範例說明
在 Logging 區段中,分為 Debug、Console、LogLevel 三個,一一來說明
Debug 區段,Debug 在這邊代表的是輸出到 Debug Provider 中,有可能是 Debug 視窗或是 Debug 指定的容器
- Default: 簡單來說就是會套用到未明確列出條件的所有 Log 這邊就是記錄 Information 層級以上的 Log
Console 區段,Console 在這邊代表的是輸出到 Console 中
- IncludeScopes: 用來設定是否啟用 LogScope,若為是則會將 LogScope 中所產生的 Log 輸出出來,若否則相反;LogScope 請參考:https://bit.ly/2PUO6Ws
LogLevel 用來設定相關紀錄層級
- Microsoft.AspNetCore.Hosting.Internal.WebHost: 當 Log 的來源之 namespace 為 Microsoft.AspNetCore.Hosting.Internal.WebHost 時,就會套用此條件 紀錄 Warning 層級以上的 Log
- Microsoft.AspNetCore.Mvc.*: 當 Log 的來源之 namespace 為 Microsoft.AspNetCore.Mvc 底下所有的 namespace 時 (包含 Microsoft.AspNetCore.Mvc ),就會套用此條件 紀錄 Warning 層級以上的 Log
- System.*: 當 Log 的來源之 namespace 為 System 底下所有的 namespace 時 (包含 System )
- Default: 簡單來說就是會套用到未明確列出條件的所有 Log 這邊就是記錄 Warning 層級以上的 Log
LogLevel 區段,假設上面都不符合的話,會套用到此條件
- Default: 簡單來說就是會套用到未明確列出條件的所有 Log 這邊就是記錄 Warning 層級以上的 Log
NOTE: 若 namespace 無 * 時,namespace 必須完全符合才會觸發規則 NOTE: 若都無指定時,預設 Log Filter 為記錄 Debug 以上所有 Log
若要修改設定所存放之地方,可以於 Program.cs 中的 CreateWebHostBuilder,加上 ConfigureLogging 相關設定,以下面為例,就是從 CustomLogging 區段中讀取 Log 設定
也可以從其他檔案中讀取相關設定
最後來介紹要如何把 Log 輸出到不同的地方
ASP.NET Core 內建以下 Provider:
- Console
- Debug
- EventSource
- EventLog
- TraceSource (必須執行在 .NET Framework 中)
- Azure App Service (會將 Log 輸出至診斷紀錄 (Diagnostics) 中,配合 App Service 中針對診斷紀錄的設定即可達成;例如輸出到儲存體)
也有第三方提供者,參考:https://bit.ly/2zmZpRO
使用方式其實很簡單,只要在 Program.cs 中的 CreateWebHostBuilder,加上 ConfigureLogging 相關設定
ASP.NET Core 內建 Logging 就介紹到此,下一篇將介紹使用 Elamh 來進行紀錄

![[IT 鐵人賽] ASP.NET Core 與 Log 紀錄和追蹤的愛恨交織 - Day 05 - Elmah - 02](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1776070454149%2Fa0702417-5357-4217-a572-7ba53ea36735.png&w=3840&q=75)
![[IT 鐵人賽] Azure Data Service - Day 04 - Cognitive Service - 辨識 - Video Indexer](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1776070473207%2F6423fd4a-4041-4bb2-b918-4cfe3f9aea5e.png&w=3840&q=75)