2016-08-23 6 views
1

WPFアプリケーションとNLogで例外とデバッグ情報を記録するためにMicrosoft Application Insightを使用しています。だから、私はアプリにInsight NLog Targetを追加しました。しかし、このNLogターゲットによって記録されたすべてのイベントには、Azureポータルのコンテキストデータは含まれません。Application Insightsのコンテキストを設定する方法NLog Target

TelemetryClientを使用して記録されたその他のイベントには、これらのデータが含まれています。

var telemetryClient = new TelemetryClient(); 
     telemetryClient.InstrumentationKey = "xxx"; 
     telemetryClient.Context.User.Id = Environment.UserName; 
     telemetryClient.Context.Session.Id = Guid.NewGuid().ToString(); 

     //var config = new LoggingConfiguration(); 
     ConfigurationItemFactory.Default.Targets.RegisterDefinition(
        "ai", 
        typeof(ApplicationInsightsTarget) 
       ); 

     ApplicationInsightsTarget aiTarget = new ApplicationInsightsTarget(); 
     aiTarget.InstrumentationKey = "xxx"; 
     aiTarget.Name = "ai"; 
     LogManager.Configuration.AddTarget("ai", aiTarget); 

     LogManager.Configuration.AddRule(LogLevel.Info, LogLevel.Info, aiTarget); 

     LogManager.Configuration.Reload(); 
     LogManager.ReconfigExistingLoggers(); 

私の質問は - NLog Targetによって記録されたイベントに対してもこのコンテキストデータを使用できますか?または、NLogのコンテキストデータもどのように設定できますか?

答えて

1

TelemetryInitializerを使用して、作成されるすべてのアイテムが必要なコンテキストを取得できるようにすることができます。

変形例から: http://apmtips.com/blog/2014/12/01/telemetry-initializers/

namespace ApmTips.Tools 
{ 
    using Microsoft.ApplicationInsights.Extensibility; 
    using Microsoft.Diagnostics.Tracing; 
    using System.Diagnostics; 

    public class ExtendedIDTelemetryInitializer : ITelemetryInitializer 
    { 
     public void Initialize(Microsoft.ApplicationInsights.Channel.ITelemetry telemetry) 
     { 
      telemetry.Context.[some field] = [some value]; 
     } 
    } 
} 

あなたもなど、その初期化子を登録する必要がありますし、上記の記事であるための命令は、それを行うには、いくつかの方法があります。

(しかしContextInitializerを使用しないでください、それはあなたがそれがないと思うだろう何からmisnamedされる)と: http://apmtips.com/blog/2015/06/09/do-not-use-context-initializers/

関連する問題