2017-04-23 103 views
1

我想知道是否有添加作用域属性到应用洞察一种优雅的方式,类似的东西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,Success, ...)。

有没有比依赖OperationTelemetry更好的方法?

回答

1

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

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