2017-03-02 55 views
1

我试图将跟踪或异常数据放到应用程序见解中。我想下面的代码:如何从Console C#应用程序获取跟踪/异常数据到应用程序见解

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(); 

但它不工作,我无法找到这样的痕迹或异常的应用分析信息中心,搜索或公制探险。

回答

1

我会尝试现有的处理(冲洗后)之前加入5秒睡眠 - IIRC刷新仅刷新本地缓存,并不会强制遥测发送到应用洞察

0

事件/消息在App Insights中可见需要长达一小时的时间。我想你必须要稍微耐心一点才能显示信息。

+0

我认为,情况并非如此,因为它已经通过了一个小时。我也尝试使用EventFlow + Trace + Application Insights发送跟踪,并花了大约一分钟的时间来获取跟踪... –

1

它看起来像TC。冲洗是不够的。我在控制台应用程序中尝试了您的代码,并未在提琴手中看到请求。当添加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

+0

是的,这就是原因。然而@Erang在一个小时前回答说...... –

0

我想你可能要使用InMemoryChannel如果添加AI到控制台/桌面/工作者应用并想Flush synchronously

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

使用InMemoryChannel将有助于防止容易出错的代码,如添加Sleep()ServerTelemetryChannel发送一些时间来发送本地存储的遥测项目。

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

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