Application Insights的范围属性

时间:2017-04-23 08:06:48

标签: asp.net-core azure-application-insights

我想知道是否有一种优雅的方式将作用域属性添加到Application Insights,类似于Serilog

var yearEnricher = new PropertyEnricher("Year", year);

using (LogContext.PushProperties(yearEnricher))
{
    // ...
}

在上一个示例中,using块中创建的每个日志都会在其上标记Year属性。

当我希望该属性出现在整个请求管道中时,我想出了如何执行此操作:

var requestTelemetry = context.Features.Get<RequestTelemetry>();
requestTelemetry?.Properties.Add(propertyName, propertyValue.ToString());

有时我想在与Web上下文无关的代码中创建日志记录范围,因此依赖IHttpContextAccessor没有意义。我承认我可以利用OperationTelemetryTelemetryClient.StartOperation来实现我的目标,但这很麻烦,因为我要实现一些我不感兴趣的属性(例如Name,{ {1}},Success ...)。

有没有比依靠Duration更好的方式?

1 个答案:

答案 0 :(得分:1)

如果您不想使用OperationTelemetry,可能需要考虑实施自己的ITelemetryInitializer(请参阅文档here)。 实现类似堆栈的全局结构以保存要推送的属性并在Dispose方法上弹出堆栈应该相当容易。

请注意,您可能需要使用CallContext才能使您的堆栈成为线程安全的。