asp.net core 5.0 中的 JsonConsole
阿新 • • 發佈:2021-01-08
# 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
-
-