【发布时间】:2021-02-22 14:21:01
【问题描述】:
我正在使用 Serilog 2.10.0 登录 .NET 5 上的 ASP.NET Core 应用程序。在尝试记录只有一个参数且此参数是数组的事件时遇到问题.以下是一些示例代码和带有 JSON 文件接收器的日志输出:
var myArray = new string[] { "foo", "bar" };
logger.LogInformation("Log stuff: {@MyArray}", myArray);
{"@t":"2021-02-22T14:09:46.8673482Z","@mt":"Log stuff: {@MyArray}","MyArray":"foo","SourceContext":"MyNamespace.MyClass"}
logger 是通过依赖注入注入的 ILogger。记录的事件仅包含我的字符串数组的第一个元素。如果我添加另一个参数,则会正确记录字符串数组。我尝试了使用和不使用@ 以及不同的接收器。
这是一个带有附加参数的修改示例,它可以按我的预期工作:
var myArray = new string[] { "foo", "bar" };
logger.LogInformation("Log stuff: {baz} {@MyArray}", "baz", myArray);
{"@t":"2021-02-22T14:19:21.3580354Z","@mt":"Log stuff: {baz} {@MyArray}","baz":"baz","MyArray":["foo","bar"],"SourceContext":"MyNamespace.MyClass"}
我怀疑我在这里误解了可变参数函数如何确定模板字符串中参数和变量之间的映射。但是我想不出在不添加不相关的附加参数的情况下让它正常工作的方法。
如何让 Serilog 正确处理以单个数组为参数的日志消息?
【问题讨论】:
-
不确定
Serilog.Log.Information是否存在同样的问题?如果您直接针对该问题工作,我怀疑它会被github.com/Suchiman/SerilogAnalyzer 标记 -
@RubenBartelink:我认为现在最好的做法是注入
ILogger,但我也经历过在整个代码中都依赖于 Serilog 的项目。 BR -
Serilog 的记录器试图避免这种情况 - github.com/serilog/serilog/blob/dev/src/Serilog/Core/… - 但从 MEL 传递事件时无法检测到这种情况。
标签: c# asp.net-core serilog microsoft-extensions-logging