У меня есть старое консольное приложение, которое я пытаюсь переключить трассировку на использование Application Insights с помощью ApplicationInsightsTraceListener.
У меня проблемы с получением конца журнала без добавления произвольного спящего режима вконец.
Я воссоздал очень простое консольное приложение, которое выглядит следующим образом:
static void Main(string[] args)
{
Trace.TraceInformation("Hello World!");
Thread.Sleep(10000);
}
С Sleep
я могу видеть его, а без него не могу.
Я пробовал несколько различных вариантов вместо сна, таких как
System.Diagnostics.Trace.Flush();
и
Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration.Active.TelemetryChannel.Flush();
Я использую из коробки ApplicationInsights.config (за исключением моегоКлюч инструментов.)
Это пакет.config:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.ApplicationInsights" version="2.8.1" targetFramework="net472" />
<package id="Microsoft.ApplicationInsights.Agent.Intercept" version="2.4.0" targetFramework="net472" />
<package id="Microsoft.ApplicationInsights.DependencyCollector" version="2.8.1" targetFramework="net472" />
<package id="Microsoft.ApplicationInsights.PerfCounterCollector" version="2.8.1" targetFramework="net472" />
<package id="Microsoft.ApplicationInsights.TraceListener" version="2.8.1" targetFramework="net472" />
<package id="Microsoft.ApplicationInsights.WindowsServer" version="2.8.1" targetFramework="net472" />
<package id="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel" version="2.8.1" targetFramework="net472" />
<package id="System.Diagnostics.DiagnosticSource" version="4.5.0" targetFramework="net472" />
</packages>
Обновление
Я повысил надежность своей доставки, закончив с блоком кода, подобнымэто, но я до сих пор не люблю спать.В этом отношении мне не нравится, что мне нужно изменить код для нового слушателя трассировки, но я сомневаюсь, что я выхожу из этого.
var channel = Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration.Active.TelemetryChannel as ServerTelemetryChannel;
channel.MaxTelemetryBufferDelay = TimeSpan.FromSeconds(.5);
Thread.Sleep(channel.MaxTelemetryBufferDelay);