我正在尝试将跟踪或异常数据放入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仪表板,搜索或公制资源管理器上找不到这样的痕迹或例外。
答案 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);
}
}
我能够看到"失败"屏幕。
答案 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中可以看到事件/消息最多需要一个小时。我想你必须要耐心等待出现的信息。