将元数据添加到Azure函数中的跟踪中

问题描述 投票:0回答:1

我有一个Azure函数(.NET core 2.0),该函数在ADO存储库中的每个PR上运行。我想将PR-ID作为元数据添加到Azure函数记录的每个跟踪中。(我正在使用Azure应用程序见解实例中的traces表查看日志)

Azure函数通过以下方式记录跟踪:

public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]HttpRequestMessage req, ILogger log, ExecutionContext context)
{
  logger.LogInformation("Trace Message");
}

如何为每个跟踪添加其他元数据?

azure-application-insights .net-core-2.0 azure-function-app
1个回答
0
投票

这可以通过ITelemetry Initializer来实现,您可以将自定义维度添加到指定的遥测中,仅用于请求。

1。安装以下nuget软件包:

Microsoft.ApplicationInsights, version 2.11.0

Microsoft.NET.Sdk.Functions, version 1.0.29

2。以下是我的测试代码。

[assembly: WebJobsStartup(typeof(FunctionApp54.MyStartup))]
namespace FunctionApp54
{

    internal class MyTelemetryInitializer : ITelemetryInitializer
    {
        public void Initialize(ITelemetry telemetry)
        {

            //use telemetry is RequestTelemetry to make sure only add to request
            if (telemetry != null && telemetry is RequestTelemetry && !telemetry.Context.GlobalProperties.ContainsKey("testpro"))
            {
                telemetry.Context.GlobalProperties.Add("testpro", "testvalue");
            }
        }
    }

    public class MyStartup : IWebJobsStartup
    {
        public void Configure(IWebJobsBuilder builder)
        {
            builder.Services.AddSingleton<ITelemetryInitializer, MyTelemetryInitializer>();

        }
    }

    public static class Function2
    {


        [FunctionName("Function2")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string name = req.Query["name"];

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic data = JsonConvert.DeserializeObject(requestBody);
            name = name ?? data?.name;

            return name != null
                ? (ActionResult)new OkObjectResult($"Hello, {name}")
                : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
        }
    }
}

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.