1. 程式人生 > >asp.net core 5.0 中的 JsonConsole

asp.net core 5.0 中的 JsonConsole

# asp.net core 5.0 中的 JsonConsole ## Intro asp.net core 5.0 中日誌新增了 `JsonConsole`,還是輸出日誌到 `Console`,但是會應用 `Json` 格式的一個 `Formatter` 把日誌格式化成 json 再輸出到控制檯 ## Sample 一起來看一個示例,以我的一個小專案為例子來演示,預設的 console 日誌格式是多行的,不夠結構化,想要進行加工的話就會比較麻煩,不能很方便的進行加工和擴充套件,而 JSON 則是一種相對來說比較結構化的資料,相對來說進行擴充套件就比較方便了。 來看一下預設日誌輸出效果: ![default console log](https://img2020.cnblogs.com/blog/489462/202101/489462-20210108002931135-1338649441.png) 如圖所示,一條日誌預設是兩行,第一行是日誌級別和日誌對應的 `CategoryName` 和 `EventId`,第二行是日誌的具體內容 接著我們來使用一下 `JsonConsole`,配置方式如下,可以在 `Program.cs` 呼叫(推薦) ![json console configure](https://img2020.cnblogs.com/blog/489462/202101/489462-20210108002930915-1071128316.png) 再來看輸出的日誌: ![json console log](https://img2020.cnblogs.com/blog/489462/202101/489462-20210108002930523-1038130687.png) 可以看到現在的日誌已經是 JSON 了,每一條日誌都是一個 JSON ## Implement 它的實現在於一個 `JsonConsoleFormatter`,是基於 `System.Text.Json` 來實現的 `Json` 格式化, 我們也可以實現自己的 `ConsoleFormatter` 來自定義 `Console` 的日誌格式,詳細實現可以參考: 擴充套件方法實現: `AddJsonConsole` 擴充套件實現: ![AddJsonConsole](https://img2020.cnblogs.com/blog/489462/202101/489462-20210108002930269-1476416183.png) `AddConsoleWithFormatter` 實現: ![AddConsoleWithFormatter](https://img2020.cnblogs.com/blog/489462/202101/489462-20210108002930020-876847222.png) `AddConsole` 實現: ![AddConsole](https://img2020.cnblogs.com/blog/489462/202101/489462-20210108002929559-1975011032.png) ## More 在之前的版本,如果想要把日誌格式化成 JSON 輸出到控制檯,需要使用第三方的日誌框架把日誌序列化成 JSON,有了 `JsonConsoleFormatter` 之後我們就可以很方便的將日誌格式化成 JSON 輸出到控制檯了。 日誌輸出為 JSON 之後,想要對日誌進行擴充套件和補充就會很容易,我們的應用目前使用的 .netcore 3.1,使用的是 nlog 把日誌格式化成 JSON 輸出到控制檯,再通過 Fluentd 收集 es,收集的同時會把應用所在的 k8s 環境資訊如containerName, podName,clusterName 等也 Patch 到日誌資訊中 示例使用了預設的配置,我們也可以通過帶 action 的過載擴充套件方法自定義 Json 格式化的配置 ## Reference -
-