如何从Console C#应用程序获取跟踪/异常数据到Application Insights

时间:2017-03-02 14:05:55

标签: c# azure azure-application-insights

我正在尝试将跟踪或异常数据放入Application Insights。我正在尝试以下代码:

TelemetryClient tc = new TelemetryClient();
tc.InstrumentationKey = "xxxxxx-xxxxxxx-xxxxxxxx-xxxxxxx";
var traceTelemetry = new TraceTelemetry("Console trace critical", SeverityLevel.Critical);
tc.TrackTrace(traceTelemetry);
tc.TrackException(new ApplicationException("Test for AI"));
tc.Flush();

但它不起作用,我在Application Insights仪表板,搜索或公制资源管理器上找不到这样的痕迹或例外。

4 个答案:

答案 0 :(得分:2)

我会尝试在现有进程之前添加5秒睡眠(在刷新之后) - IIRC刷新只刷新本地缓冲区,并且不强制将遥测发送到Application Insights

答案 1 :(得分:1)

看起来tc.Flush还不够。我在控制台应用程序中尝试了您的代码,并没有在Fiddler中看到请求。添加Thread.Sleep(5000)后,异常显示出来。

class Program
{
    static void Main(string[] args)
    {
        TelemetryClient tc = new TelemetryClient();
        tc.InstrumentationKey = "fe549116-0099-49fe-a3d6-f36b3dd20860";
        var traceTelemetry = new TraceTelemetry("Console trace critical", SeverityLevel.Critical);
        tc.TrackTrace(traceTelemetry);
        tc.TrackException(new ApplicationException("Test for AI"));
        tc.Flush();

        // Without this line Fiddler didn't show a request
        Thread.Sleep(5000);
    }
}

我能够看到"失败"屏幕。

enter image description here

答案 2 :(得分:1)

如果您要在控制台/桌面/工作人员应用程序中添加AI并希望Flush synchronously,我认为您可能希望使用InMemoryChannel

InMemoryChannel在发送遥测信号之前不会在本地存储数据,因此如果线路上发生任何事情,则无法防止数据丢失。但是,当您拨打Flush()时,它实际上会尝试发送遥测而不是将其保存到磁盘。

使用InMemoryChannel有助于防止容易出错的代码,例如添加Sleep()以便ServerTelemetryChannel发送本地存储的遥测项目。

您需要通过代码或ApplicationInsights.coinfig文件替换ServerTelemetryChannel

<TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel">

答案 3 :(得分:0)

在App Insights中可以看到事件/消息最多需要一个小时。我想你必须要耐心等待出现的信息。