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

问题描述 投票:0回答:4

我正在尝试将跟踪或异常数据放入 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 仪表板、搜索或指标资源管理器上找不到这些跟踪或异常。

c# azure azure-application-insights
4个回答
3
投票

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


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


1
投票

我认为如果您要将 AI 添加到控制台/桌面/工作应用程序中并且想要

同步刷新
,您可能需要使用 InMemoryChannel

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

使用

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

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

ServerTelemetryChannel

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

0
投票

App Insights 中最多需要一个小时才能显示事件/消息。我想您必须多一点耐心才能显示该消息。

© www.soinside.com 2019 - 2024. All rights reserved.