我正在尝试将跟踪或异常数据放入 Application Insights。我正在尝试以下代码:
TelemetryClient tc = new TelemetryClient();
tc.InstrumentationKey = "xxxxxx-xxxxxxx-xxxxxxxx-xxxxxxx";
tc.TrackTrace(new TraceTelemetry("Console trace critical", SeverityLevel.Critical));
tc.TrackException(new ApplicationException("Test for AI"));
tc.Flush();
但它不起作用,我在 Application Insights 仪表板、搜索或指标资源管理器上找不到这些跟踪或异常。
我会尝试在现有进程之前(刷新之后)添加 5 秒的睡眠 - IIRC 刷新仅刷新本地缓冲区,并且不会强制将遥测数据发送到 Application Insights
看起来 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);
}
}
我能够在“失败”屏幕中看到异常。
我认为如果您要将 AI 添加到控制台/桌面/工作应用程序中并且想要
同步刷新,您可能需要使用
InMemoryChannel
。
InMemoryChannel
在发送遥测数据之前不会在本地存储数据,因此如果线路上发生任何情况,无法防止数据丢失。但是,当您调用 Flush()
时,它实际上会尝试发送遥测数据,而不是将其保存到磁盘。
使用
InMemoryChannel
将有助于防止容易出错的代码,例如添加 Sleep()
为 ServerTelemetryChannel
提供一些时间来发送本地存储的遥测项目。
您需要通过代码或在 ApplicationInsights.coinfig 文件中替换
ServerTelemetryChannel
:
<TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel">
App Insights 中最多需要一个小时才能显示事件/消息。我想您必须多一点耐心才能显示该消息。