How to use Serilog in ASP.NET Core 8 MVC application
前言
筆者在前兩篇有針對 "ASP.NET MVC 及 ASP.NET Core MVC 的錯誤處理" 作了描述. 對於錯誤處理(Error Handling) 作了以下定義: 係指錯誤取得 (Catch), 訊息規格 (Specification), 呈現 (Presentation), 及記錄 (Logging).
前兩篇涵蓋了 "錯誤取得" 及 "訊息規格", 尚餘 "呈現" 及 "記錄".
呈現 (Presentation):
需視需求而定. 由於對前端不是很專長, 這裡就先藏拙不表.
記錄 (Logging):
本文主要著重於此. 由於很多人推薦 Serilog, 所以, 就以此作為演練的對象. 一般而言, 記錄會包含以下幾個面向:
- 記錄的層級 (Log Level).
各個 Log 套件都有其 Log Level 的定義, 但大同小異. - 記錄的目標或提供者 (Log Target / Log Provider / Log Sinks).
例如: Console, File, MSSQL, Seq. 前3者很明確, 不作贅述. 至於 Seq 則是一個集中的 Logging 服務 , 它提供了 Web UI 介面, 可以讓開發人員或系統管理人員操作, 進行記錄的查詢.- 在 NLog 稱之為 Targets.
對於 NLog 有興趣的朋友, 可參考這篇文章 NLog Tutorial - The essential guide for logging from C#. - 在 ASP.NET Core build-in Logger 稱之為 Provider.
- 在 Serilog 稱之為 Sinks . 中文很難翻譯, 查 Google 是水槽, 反正就是一個記錄儲存的地方.
- 在 NLog 稱之為 Targets.
- 記錄的內容 (Log Content): 需視需求而定.
本文將以前述 "ASP.NET Core MVC Error Handling 摘要版" 的程式為基底, 繼續往下增修內容.
章節內容如下:
一. 內建 Logger 的功能
二. 加入 Serilog 相關套件
三. 輸出至 Console 及 File 入門
四. 利用 UseSerilogRequestLogging middleware 記錄 Http Request 內容
五. 自訂輸出格式
六. 輸出至 Seq Logging 服務入門
七. 輸出至 MSSQL 資料庫入門
(一) 套件安裝
(二) 由 Serilog.Sinks.MSSqlServer 決定預設的欄位及資料型態 (by appsettings.json)
(三) Serilog.Sinks.MSSqlServer 欄位種類概述
(四) 自訂 Serilog.Sinks.MSSqlServer 的欄位及資料型態 (by Program.cs)
(五) 自訂 Serilog.Sinks.MSSqlServer 的欄位及資料型態 (for ProblemDetails by Program.cs)
(六) 改用自定義的統一輸出格式 (MyProblemDetails)
(七) 建立一層 LoggingService 打包 ILogger, 以利寫入資料庫欄位
八. 關於 Serilog 的增強器 (Enrichers)
範例存放於 GitHub, 有興趣的朋友, 可自行下載參考.