鉴于此代码:
var d1 = new { x = 5, y = 88 };
Log.Logger.Information("{d1}", d1);
Log.Logger.Information("{@d1}", d1);
如何在两个Log.Logger.Information(...)行中以不同方式记录d1中的对象? 换句话说,在{}?
之间添加@的效果是什么我在“保留对象结构”标题下阅读https://github.com/serilog/serilog/wiki/Structured-Data,但这对我没有意义。
答案 0 :(得分:5)
{d1}
将无法识别的类型(如此处的匿名类型)转换为string
s进行日志记录,即使用ToString()
。因此,第一个示例中的日志事件将以诸如(此处为JSON)的属性结束:
{
"d1": "{ x = 5, y = 88 }"
}
使用{@d1}
将导致参数序列化为结构化数据:
{
"d1":
{
"x": 5,
"y": 88
}
}
在适当的情况下,第二个例子对于操作/分析更有用。
这个"选择加入的原因"要求是.NET程序中的大多数类型很好地转换为字符串,但不是干净/有意义的可序列化。通过选择使用@
进行序列化您会说:"我知道我在做什么,序列化此对象!" :)