asp.net core 5.0 中的 JsonConsole

asp.net core 5.0 中的 JsonConsole

Intro

asp.net core 5.0 中日誌新增了 JsonConsole,仍是輸出日誌到 Console,可是會應用 Json 格式的一個 Formatter 把日誌格式化成 json 再輸出到控制檯git

Sample

一塊兒來看一個示例,以個人一個小項目爲例子來演示,默認的 console 日誌格式是多行的,不夠結構化,想要進行加工的話就會比較麻煩,不能很方便的進行加工和擴展,而 JSON 則是一種相對來講比較結構化的數據,相對來講進行擴展就比較方便了。github

來看一下默認日誌輸出效果:json

default console log

如圖所示,一條日誌默認是兩行,第一行是日誌級別和日誌對應的 CategoryNameEventId,第二行是日誌的具體內容框架

接着咱們來使用一下 JsonConsole,配置方式以下,能夠在 Program.cs 調用(推薦)asp.net

json console configure

再來看輸出的日誌:.net

json console log

能夠看到如今的日誌已是 JSON 了,每一條日誌都是一個 JSON3d

Implement

它的實如今於一個 JsonConsoleFormatter,是基於 System.Text.Json 來實現的 Json 格式化,日誌

咱們也能夠實現本身的 ConsoleFormatter 來自定義 Console 的日誌格式,詳細實現能夠參考:https://github.com/dotnet/runtime/blob/v5.0.0/src/libraries/Microsoft.Extensions.Logging.Console/src/JsonConsoleFormatter.cscode

擴展方法實現https://github.com/dotnet/runtime/blob/v5.0.0/src/libraries/Microsoft.Extensions.Logging.Console/src/ConsoleLoggerExtensions.csorm

AddJsonConsole 擴展實現:

AddJsonConsole

AddConsoleWithFormatter 實現:

AddConsoleWithFormatter

AddConsole 實現:

AddConsole

More

在以前的版本,若是想要把日誌格式化成 JSON 輸出到控制檯,須要使用第三方的日誌框架把日誌序列化成 JSON,有了 JsonConsoleFormatter 以後咱們就能夠很方便的將日誌格式化成 JSON 輸出到控制檯了。

日誌輸出爲 JSON 以後,想要對日誌進行擴展和補充就會很容易,咱們的應用目前使用的 .netcore 3.1,使用的是 nlog 把日誌格式化成 JSON 輸出到控制檯,再經過 Fluentd 收集 es,收集的同時會把應用所在的 k8s 環境信息如containerName, podName,clusterName 等也 Patch 到日誌信息中

示例使用了默認的配置,咱們也能夠經過帶 action 的重載擴展方法自定義 Json 格式化的配置

Reference

相關文章
相關標籤/搜索