簡體   English   中英

使用Serilog編寫結構化日志

[英]Writing structured logs with Serilog

我用Serilog嘗試了以下日志:

this.logger.Debug("Incoming metrics data {ClientId}", new { clientid = 54732 });

Serilog產生了以下輸出:

Incoming metrics data "{ clientid = 54732 }"

Serilog是結構化的記錄器,我期望它會產生以下內容:

Incoming metrics data {ClientId}, {clientId: 54732}

我做錯了什么還是我理解Serilog /結構化日志錯誤?

兩件事情; 首先,要序列化這樣的結構,您需要使用結構捕獲運算符 @

this.logger.Debug("Incoming metrics data {@Client}", new { ClientId = 54732 });

這將捕獲傳入的對象的各個屬性,因此重寫示例中的事件將具有帶ClientId子屬性的Client屬性。

這將為您提供如下輸出:

Incoming metrics data {"ClientId": 54732}

(假設您使用的是默認模板的最新Serilog控制台接收器;其他配置可能無法以JSON樣式打印嵌入式數據。)

第二個考慮因素是該事件的完整結構未在Serilog的文本輸出中顯示-這是Serilog的“人性化”面孔。 如果要記錄結構,則可以像這樣插入CompactJsonFormatter (同樣假定控制台接收器):

.WriteTo.Console(new CompactJsonFormatter())

這也適用於文件等-有關詳細信息, 參見https://github.com/serilog/serilog-formatting-compact

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM