使用 Serilog 到 Application Insights 的 Azure 函数日志记录

Azure Function Logging with Serilog to Application Insights

我们将 Azure Function V3 与 dot net core 3.1 一起使用,并将跟踪和事件记录到 Application Insights。 这工作得很好。但是我们想将对象数据添加到日志负载中,因此我们使用 Serilog.

如果我们使用 namespace Microsoft.Extensions.Logging 中的 ILogger 接口,对象将无法正确序列化。

_logger.LogInformation("Test {@model}", testmodel);

如果我们使用 Serilog 接口,它会工作并且数据将在 Application Insights 中序列化:

logger.Information("Test Serilog {@model}", testmodel);

Startup.cs 看起来像这样:

public class Startup : FunctionsStartup
{
  public override void Configure(IFunctionsHostBuilder builder)
  {
    var logger = new LoggerConfiguration()
      .WriteTo.ApplicationInsights(TelemetryConfiguration.CreateDefault(), TelemetryConverter.Traces, Serilog.Events.LogEventLevel.Information)
      .Destructure.ToMaximumCollectionCount(10)
      .Destructure.ToMaximumDepth(4)
      .CreateLogger();
    builder.Services.AddLogging(c => c.AddSerilog(logger));
    // Add other services
  }
}

您准备好使用 Serilog 了吗?否则,更简单(且有正式记录)的方法可能是在您的函数中使用 AppInsights TelemetryClient。通过这种方式,您可以跟踪各种事件和遥测到 AppInsights:

https://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-class-library?tabs=v2%2Ccmd#log-custom-telemetry-in-c-functions

我建议看一下 Arcus 可观察性库。它允许您使用 ILogger 接口将日志、自定义指标等写入 Application Insights(使用 Serilog)。 https://observability.arcus-azure.net/

https://observability.arcus-azure.net/guidance/use-with-dotnet-and-functions.html