Как "сбросить" ApplicationInsightsTraceListener в Консольном приложении при выходе? - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть старое консольное приложение, которое я пытаюсь переключить трассировку на использование 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);

1 Ответ

0 голосов
/ 13 декабря 2018

К сожалению, хорошего решения сейчас нет.Запрос Flush, который возвращается только после того, как все данные сохраняются - находится в backlog .

Один из вариантов - заменить канал телеметрии на InMemoryChannel.Тогда Flush будет гарантировать, что данные отправляются в конечную точку.Но этот канал не повторяется, если конечная точка недоступна, поэтому существует вероятность потери данных.

Другой вариант - создать собственный телеметрический канал.Но это может потребовать много работы, чтобы сделать его надежным.

ServerTelemetryChannel повторно отправит данные, когда консольное приложение вернется.Не уверен, поможет ли это в вашем сценарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...