[英]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.