首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Serilog编写结构化日志

用Serilog编写结构化日志
EN

Stack Overflow用户
提问于 2018-01-23 09:05:30
回答 1查看 1.7K关注 0票数 2

我使用Serilog尝试了以下日志:

代码语言:javascript
复制
this.logger.Debug("Incoming metrics data {ClientId}", new { clientid = 54732 });

Serilog生产了这一产出:

代码语言:javascript
复制
Incoming metrics data "{ clientid = 54732 }"

Serilog是一个结构化的记录器,我希望它能产生这样的结果:

代码语言:javascript
复制
Incoming metrics data {ClientId}, {clientId: 54732}

我是做错了什么,还是理解了Serilog/结构化日志记录错误?

EN

回答 1

Stack Overflow用户

发布于 2018-01-24 06:31:55

有两件事;首先,要序列化这样的结构,您需要使用结构捕获操作符@

代码语言:javascript
复制
this.logger.Debug("Incoming metrics data {@Client}", new { ClientId = 54732 });

这将捕获传入的对象的各个属性,因此重写示例中的事件将具有一个带有Client子属性的ClientId属性。

这将为您提供如下输出:

代码语言:javascript
复制
Incoming metrics data {"ClientId": 54732}

(假设您使用的是最新的带有默认模板的Serilog控制台接收器;其他配置可能不会打印嵌入式数据JSON样式。)

第二个考虑因素是,整个事件的结构没有显示在Serilog的文本输出中--这是Serilog的“人性化”面孔。如果您想记录结构,您可以插入类似的CompactJsonFormatter (同样假设控制台接收器):

代码语言:javascript
复制
.WriteTo.Console(new CompactJsonFormatter())

这也适用于文件等-在https://github.com/serilog/serilog-formatting-compact的详细信息。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48397796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档