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

问题描述

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

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

_logger.Log@R_377_4045@ion("Test {@model}",testmodel);

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

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

Serilog

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.@R_377_4045@ion)
      .Destructure.ToMaximumCollectionCount(10)
      .Destructure.ToMaximumDepth(4)
      .CreateLogger();
    builder.Services.AddLogging(c => c.AddSerilog(logger));
    // Add other services
  }
}

解决方法

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

com.sun.jna.win32.StdCallLibrary

,

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

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