我正在使用 Serilog 2.10.0 登录 .NET 5 上的 ASP.NET Core 应用程序。当尝试记录只有一个参数且该参数是一个数组的事件时,我遇到了问题。以下是一些示例代码和 JSON 文件接收器的日志输出:
var myArray = new string[] { "foo", "bar" };
logger.LogInformation("Log stuff: {@MyArray}", myArray);
Run Code Online (Sandbox Code Playgroud)
{"@t":"2021-02-22T14:09:46.8673482Z","@mt":"Log stuff: {@MyArray}","MyArray":"foo","SourceContext":"MyNamespace.MyClass"}
Run Code Online (Sandbox Code Playgroud)
这logger是通过依赖注入注入的 ILogger。记录的事件仅包含我的字符串数组的第一个元素。如果我添加另一个参数,字符串数组将被正确记录。我尝试过使用和不@使用不同的水槽。
这是一个带有附加参数的修改示例,其工作原理符合我的预期:
var myArray = new string[] { "foo", "bar" };
logger.LogInformation("Log stuff: {baz} {@MyArray}", "baz", myArray);
Run Code Online (Sandbox Code Playgroud)
{"@t":"2021-02-22T14:19:21.3580354Z","@mt":"Log stuff: {baz} {@MyArray}","baz":"baz","MyArray":["foo","bar"],"SourceContext":"MyNamespace.MyClass"}
Run Code Online (Sandbox Code Playgroud)
我怀疑我在这里误解了可变参数函数如何确定模板字符串中参数和变量之间的映射。但我无法找到一种方法可以使其在不添加不相关的附加参数的情况下正常工作。
如何让 Serilog 正确处理以单个数组作为参数的日志消息?
我在 .NET 6 上使用 SignalR .NET 客户端和服务器,重新连接延迟似乎与我预期的不同。我在服务器上使用以下代码来定义自定义 RetryPolicy:
connection = new HubConnectionBuilder()
.WithUrl(url)
.WithAutomaticReconnect(new RetryPolicy())
.Build();
public class RetryPolicy : IRetryPolicy
{
public TimeSpan? NextRetryDelay(RetryContext retryContext)
{
var delay = retryContext.PreviousRetryCount switch
{
< 5 => TimeSpan.FromSeconds(0),
< 10 => TimeSpan.FromSeconds(5),
_ => TimeSpan.FromSeconds(10),
};
Console.WriteLine($"NextRetryDelay count: {retryContext.PreviousRetryCount} elapsed: {retryContext.ElapsedTime} delay: {delay}");
return delay;
}
}
Run Code Online (Sandbox Code Playgroud)
当我触发断开连接时,我会得到以下输出:
NextRetryDelay count: 0 elapsed: 00:00:00 delay: 00:00:00
NextRetryDelay count: 1 elapsed: 00:00:08.1187903 delay: 00:00:00
NextRetryDelay count: 2 elapsed: 00:00:12.1619132 delay: 00:00:00
NextRetryDelay count: …Run Code Online (Sandbox Code Playgroud)