2016-08-23 7 views
1

Я использую Microsoft Application Insights в своем приложении WPF и NLog для регистрации исключений и отладки информации. Итак, я добавил Application Insights NLog Target в приложение. Но все события, зарегистрированные этим целевым объектом NLog, не содержат контекстных данных на портале Azure.Как установить контекст для приложений 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, это неверно названы от того, что можно подумать, что он делает), а также: http://apmtips.com/blog/2015/06/09/do-not-use-context-initializers/

 Смежные вопросы

  • Нет связанных вопросов^_^