我用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 /结构化日志错误?
答案 0 :(得分:3)
两件事;首先,要序列化这样的结构,您需要使用结构捕获运算符 @
:
this.logger.Debug("Incoming metrics data {@Client}", new { ClientId = 54732 });
这将捕获传入的对象的各个属性,因此重写示例中的事件将具有Client
属性为ClientId
的属性。
这将为您提供如下输出:
Incoming metrics data {"ClientId": 54732}
(假设您使用的是最新的Serilog控制台接收器和默认模板;其他配置可能无法打印嵌入式数据JSON样式。)
第二个考虑因素是事件的完整结构未在Serilog的文本输出中显示 - 它是人类友好的"面对Serilog。如果你想记录结构,可以像这样插入CompactJsonFormatter
(再次假设控制台接收器):
.WriteTo.Console(new CompactJsonFormatter())
这也适用于文件等 - 详情请见https://github.com/serilog/serilog-formatting-compact。