0

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

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

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

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

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

2 回答 2

3

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

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

于 2021-03-08T21:41:20.257 回答
2

你打算使用 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

于 2021-01-13T08:38:09.537 回答