小编Fab*_*ian的帖子

Serilog 仅记录数组的第一个元素

我正在使用 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 正确处理以单个数组作为参数的日志消息?

c# serilog asp.net-core microsoft-extensions-logging

10
推荐指数
1
解决办法
8052
查看次数

使用自定义 RetryPolicy 的 SignalR 重新连接不遵守该策略并增加了额外的延迟

我在 .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)

c# signalr .net-core

5
推荐指数
1
解决办法
608
查看次数