我正在使用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
。记录的事件只包含我的字符串数组的第一个元素。如果我添加另一个参数,则字符串数组将被正确记录。我尝试过带有和不带有@
符号,以及不同的sink
。这是一个带有附加参数的修改后示例,它按照我的预期工作:
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
是否存在同样的问题?如果您直接使用它,我怀疑它会被 https://github.com/Suchiman/SerilogAnalyzer 检测到。 - Ruben BartelinkILogger
,但我也遇到过整个代码都依赖于Serilog的项目。BR - Roar S.