鉴于此代码:
var d1 = new { x = 5, y = 88 };
Log.Logger.Information("{d1}", d1);
Log.Logger.Information("{@d1}", d1);
d1 中的对象如何在两条 Log.Logger.Information(...) 行中以不同的方式记录?
换句话说,在 { } 之间添加 @ 的效果是什么?
I read https://github.com/serilog/serilog/wiki/Structured-Data https://github.com/serilog/serilog/wiki/Structured-Data在“保留对象结构”标题下,但这对我来说没有意义。
{d1}
将无法识别的类型(例如此处的匿名类型)转换为string
s 用于记录,即使用ToString()
。因此,第一个示例中的日志事件将以如下属性结束(此处为 JSON):
{
"d1": "{ x = 5, y = 88 }"
}
Using {@d1}
将导致参数被序列化为结构化数据:
{
"d1":
{
"x": 5,
"y": 88
}
}
在适当的情况下,第二个示例对于操作/分析更有用。
这种“选择加入”要求的原因是 .NET 程序中的大多数类型都能很好地转换为字符串,但是aren't干净/有意义地可序列化。通过选择序列化@
你是说:“我知道我在做什么,序列化这个对象!” :)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)