[英]Add logging context to all Azure Function logs
默認情況下,Azure Functions 會將日志記錄上下文數據添加到所有日志。 是否可以添加其他要全局記錄的上下文項? 具體來說,我想添加全局數據,例如內部版本號。 我找不到任何不需要第三方日志框架(如 Serilog)的鈎子,但顯然支持是存在的。
您可以創建一個自定義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>();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.