如何为Application Insights Log4Net Appender设置遥测通道?

时间:2019-05-20 13:36:52

标签: c# wpf log4net azure-application-insights log4net-appender

我将这些Nuget程序包添加到了WPF应用程序中:

  • Microsoft.ApplicationInsights.Log4NetAppender
  • Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel

记录器正在登录一个文件,该文件有效。但是没有数据传输到Azure。 我收到此错误:

  • AI:服务器遥测通道未初始化。因此,永久性存储已关闭。您需要调用ServerTelemetryChannel.Initialize()。当前监视将继续,但是如果无法发送遥测,它将被丢弃。

我的问题:我应该在哪里(在代码中)初始化遥测通道?为什么我必须这样做?如果我仍然必须添加遥测客户端(使用配置),追加器是什么?

2 个答案:

答案 0 :(得分:0)

更新:请按照下面的屏幕截图,并尝试查找您发送的信息。并且,如果仍然找不到该信息,请提供详细的代码(删除个人/重要数据(如工具密钥),并向我们提供您正在使用的nuget软件包和版本)。

1。单击概述页面中的搜索按钮:

enter image description here

2。在搜索屏幕中,正确设置本地时间和事件类型,然后尝试搜索消息:

enter image description here


您最好提供代码来设置log4net和应用洞察密钥。

我用wpf项目做了一个简单的测试,下面的代码可以正常工作:

public partial class MainWindow : Window
{

    private static readonly ILog log = LogManager.GetLogger(typeof(MainWindow));
    public MainWindow()
    {
        TelemetryConfiguration.Active.InstrumentationKey = "the key";
        log4net.Config.XmlConfigurator.Configure();

        log.Info("wpf aaaa11111");


        InitializeComponent();
    }
 }

您会收到错误消息“ AI:服务器遥测通道未初始化”,可能是由于某些不正确的配置所致,例如在上面的工作代码中使用以下代码:

//when add the code, it will cause the error you mentioned.
TelemetryConfiguration.Active.TelemetryChannel = new ServerTelemetryChannel();

如果必须添加遥测客户端(使用config)并且配置正确,则log4net和遥测客户端都可以将数据发送到应用程序见解。如下代码:

public partial class MainWindow : Window
{
    private readonly TelemetryClient telemetryClient;
    private static readonly ILog log = LogManager.GetLogger(typeof(MainWindow));
    public MainWindow()
    {
        //configure the key here for log4net
        TelemetryConfiguration.Active.InstrumentationKey = "the key";
        log4net.Config.XmlConfigurator.Configure();

        var config = new TelemetryConfiguration();

        //configure the key here for telemetry client
        config.InstrumentationKey = "the key";
        telemetryClient = new TelemetryClient(config);

        log.Info("wpf aaaa333");
        log.Info(TelemetryConfiguration.Active.TelemetryChannel.ToString());

        telemetryClient.TrackTrace("it is going to start!");

        InitializeComponent();
    }
}

答案 1 :(得分:0)

因此,最终一切正常。我再次在此处提供所需步骤:

  1. 添加NugetPackages: log4net,Microsoft.ApplicationInsights,Microsoft.ApplicationInsights.Log4NetAppender和Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel到项目

  2. 在MainWindow.xaml.cs中:

    private static readonly ILog log = LogManager.GetLogger(typeof(MainWindow));
    public MainWindow()
    {
        TelemetryConfiguration.Active.InstrumentationKey = "the key";
        log4net.Config.XmlConfigurator.Configure();
    
        log.Info("wpf aaaa11111");
    
    
        InitializeComponent();
    }
    }    
    
  3. 在App.config中: App.config

  4. 完成

非常感谢@Ivan Yang的解决方案以及他为我提供的帮助!