用Serilog编写结构化日志

问题描述 投票:2回答:1

我用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 /结构化日志错误?

c# .net serilog structured-logging
1个回答
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的详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.