gpt4 book ai didi

azure - 将 Serilog 中的 outputTemplate 参数与 Azure Application Insights 结合使用

转载 作者:行者123 更新时间:2023-12-03 23:11:02 26 4
gpt4 key购买 nike

我目前正在使用 Serilog 实现 Azure Application Insights 日志记录,除非我在 Serilog 配置中使用输出模板,否则该日志记录工作正常。将 Serilog 数据传递给应用程序洞察时,模板似乎被忽略了。

appsetting.json 中的我的 serilog 配置:

"Serilog": {
"Using": [ "Serilog.Sinks.ApplicationInsights" ],
"MinimumLevel": "Debug",
"WriteTo": [
{ "Name": "Console" },
{
"Name": "RollingFile",
"Args": {
"pathFormat": "logs\\log-{Date}.txt",
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {Message}{NewLine}{Exception}"
}
},
{
"Name": "ApplicationInsights",
"Args": {
"restrictedToMinimumLevel": "Information",
"telemetryConverter": "Serilog.Sinks.ApplicationInsights.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights",
"outputTemplate": "Test Template - {Message}"
}
}
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
"Properties": {
"Application": "app"
}
},

日志记录语句:

logger.Error("测试 AI 的 Serilog 错误 - "+ DateTime.Now);

应用程序洞察中的输出:

enter image description here

这是为应用程序见解自定义错误消息的正确方法吗?

最佳答案

查看源码后serilog-sinks-applicationinsights ,你会发现它没有从appsetting.json读取outputTemplate

要解决此问题,您可以实现自定义 TemplateTraceTelemetryConverter

  1. TemplateTraceTelemetryConverter

    public class TemplateTraceTelemetryConverter : TraceTelemetryConverter
    {
    public override IEnumerable<ITelemetry> Convert(LogEvent logEvent, IFormatProvider formatProvider)
    {
    var templateParser = new MessageTemplateParser();
    var template = templateParser.Parse($"Test Template - {logEvent.MessageTemplate.Text}");
    LogEvent newLogEvent = new LogEvent(logEvent.Timestamp
    , logEvent.Level
    , logEvent.Exception
    , template
    , logEvent.Properties.Select(p => new LogEventProperty(p.Key, p.Value)));
    return base.Convert(newLogEvent, formatProvider);
    }
    }
  2. 使用TemplateTraceTelemetryConverter

    "Serilog": {
    "Using": [
    "Serilog.Sinks.ApplicationInsights",
    ],
    "MinimumLevel": "Debug",
    "WriteTo": [
    {
    "Name": "Console",
    "Args": {
    "outputTemplate": "Test Template - {Message}"
    }
    },
    {
    "Name": "RollingFile",
    "Args": {
    "pathFormat": "logs\\log-{Date}.txt",
    "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {Message}{NewLine}{Exception}"
    }
    },
    {
    "Name": "ApplicationInsights",
    "Args": {
    "restrictedToMinimumLevel": "Error",
    "telemetryConverter": "YourProjectNamespace.TemplateTraceTelemetryConverter, YourProjectNamespace"
    //"outputTemplate": "Test Template - {Message}"
    }
    }
    ],
    "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
    "Properties": {
    "Application": "app"
    }
    }

关于azure - 将 Serilog 中的 outputTemplate 参数与 Azure Application Insights 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57183780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com