2017-04-23 53 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以使您的堆棧成爲線程安全的。