将日志记录上下文添加到所有Azure Function日志

cbjzeqam  于 2023-11-21  发布在  其他
关注(0)|答案(1)|浏览(124)

默认情况下,Azure Functions会将日志记录上下文数据添加到所有日志中。是否可以添加其他要全局记录的上下文项?具体来说,我想添加全局数据,如内部版本号。我找不到任何不需要第三方日志记录框架(如Serilog)的钩子,但显然支持是存在的。
为了澄清,我希望这是一个通用的解决方案,而不是专门绑定到任何sink。我在各种项目中使用Seq,Stackify和Application Insights。

wnavrhmk

wnavrhmk1#

您可以创建一个自定义的ITelemetryInitializer来添加其他属性。
这里我创建了一个名为BuildNumber的应用程序设置:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "APPINSIGHTS_INSTRUMENTATIONKEY": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx",
    "BuildNumber": "X.X.X"
  }
}

字符串
和TelemetryInitializer,然后从配置中获取其他属性。

using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.DataContracts;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.Extensions.Configuration;
using System;
...
public class AdditionalPropertyTelemetryInitializer : ITelemetryInitializer
{
    private readonly IConfiguration _configuration;

    public AdditionalPropertyTelemetryInitializer(IConfiguration configuration)
    {
        _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
    }

    public void Initialize(ITelemetry telemetry)
    {
        var requestTelemetry = telemetry as RequestTelemetry;

        // Here we filter on request telemetry
        if (requestTelemetry == null) return;

        requestTelemetry.Properties.Add("BuildNumber", _configuration["BuildNumber"]);
    }
}


最后一件事是注册TelemetryInitializer:

using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;

[assembly: FunctionsStartup(typeof(FunctionApp1.Startup))]
namespace FunctionApp1
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            builder.Services.AddSingleton<ITelemetryInitializer, AdditionalPropertyTelemetryInitializer>();
        }
    }
}


我现在可以在应用程序洞察遥测上看到BuildNumber:

相关问题