我在我的代码中直接使用TelemetryClient(v0.17.0.576),看起来我只能在最后手动调用Flush时将数据推送到Azure,这感觉不对。我在这里错过了什么吗?
var configuration = TelemetryConfiguration.CreateDefault();
configuration.InstrumentationKey = "KEY";
var client = new TelemetryClient(configuration);
for (int i = 0; i < 10; i++)
{
log.Information("Loop: {0} {1}", i, value);
client.Track(new TraceTelemetry(value));
}
client.Flush();
出于性能原因,Application Insights SDK批量遥测并以块的形式发送。要查看此操作,您可以通过调用Thread.Sleep(70000)替换您的Flush调用,一旦应用程序终止,您将看到上传到AI的工具。
添加到Mario Hewardt的答案。如果你使用persistence channel:
TelemetryConfiguration.Active.TelemetryChannel = new PersistenceChannel();
Flush()
是同步的(所以你不需要在一段时间内睡眠线程)。如果无法联系Application Insights,它还可以将遥测数据保存到本地文件,然后在下次使用良好连接调用Flush()
时发送。
Thread.sleep(30000)正在为我工作,但flush在应用程序中不起作用。我想使用Flush()方法,因为我无法睡眠我的应用程序30秒。 Flush()方法是与特定版本相关还是我缺少其他东西?
我有控制台应用程序调用另一个控制台库,它将进一步调用另一个具有遥测类的控制台库(即控制台应用程序 - > DLL - > DLL(具有遥测实现))。