gpt4 book ai didi

.net - Serilog:{..} 和 {@..} 之间的区别

转载 作者:行者123 更新时间:2023-12-01 11:38:37 25 4
gpt4 key购买 nike

鉴于此代码:

var d1 = new { x = 5, y = 88 };
Log.Logger.Information("{d1}", d1);
Log.Logger.Information("{@d1}", d1);

d1 中的对象将如何以不同的方式记录在两个 Log.Logger.Information(...) 行中?
换句话说,在 { } 之间添加 @ 的效果是什么?

我读了 https://github.com/serilog/serilog/wiki/Structured-Data在“保留对象结构”标题下,但这对我来说没有意义。

最佳答案

{d1}将无法识别的类型(如这里的匿名类型)转换为 string s 用于记录,即使用 ToString() .因此,您在第一个示例中的日志事件将以如下属性结束(此处为 JSON):

{
"d1": "{ x = 5, y = 88 }"
}

使用 {@d1}将导致参数被序列化为结构化数据:
{
"d1":
{
"x": 5,
"y": 88
}
}

在适当的情况下,第二个示例对于操作/分析更有用。

这种“选择加入”要求的原因是 .NET 程序中的大多数类型都可以很好地转换为字符串,但不能完全/有意义地序列化。通过使用 @ 选择序列化你是说:“我知道我在做什么,序列化这个对象!” :)

关于.net - Serilog:{..} 和 {@..} 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24588571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com