问题描述
我们使用带有 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);
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