Есть ли способ ограничить ведение журнала ошибок в Appinsight при попытке подключения к удаленной базе данных космоса - PullRequest
0 голосов
/ 29 января 2020

Я использую azure cosmos db для сохранения некоторых данных. Я не могу изменить строку подключения и все остальные детали Azure cosmos db в приложении.

В случае, если Azure cosmos db удален, я добавил один блок try catch для перехвата исключения при каждой попытке сделано для подключения к azure cosmosdb и регистрации его в azure телеметрии AppInsight.

Но, регистрируя это исключение, я также получаю несколько System.Net.Sockets.SocketException зарегистрированных.

Я попытался отладить код, но не могу найти место root для этого исключения, а также по мере получения исключения вошел в azure appinsight с некоторой задержкой, я не могу точно определить место, где он генерируется.

Что я хочу сделать, так это минимизировать ведение журнала того же исключения или игнорировать его, если это возможно.

Заранее спасибо

1 Ответ

0 голосов
/ 29 января 2020

Да, вы можете фильтровать телеметрию, используя TelemetryProcessor. См. документы .

. Вот пример, который исключает все SocketException из ведения журнала. Вы можете написать свою собственную логику c, чтобы решить, что исключить.

public class ExceptionTelemetryFilter : ITelemetryProcessor
    {
        private readonly ITelemetryProcessor _next;

        public ExceptionTelemetryFilter(ITelemetryProcessor next)
        {
            _next = next;
        }

        /// <summary>
        /// Exclude SocketException from logging
        /// </summary>
        /// <param name="item"></param>
        public void Process(ITelemetry item)
        {
            if(!(item is ExceptionTelemetry exception)  // If it is not an exception
               || !(exception.Exception is SocketException)) // or it is not a SocketException
                _next.Process(item); // then log the item by sending it down the processing pipeline
        }
    }

Вывод состоит в том, что если вы хотите исключить элемент из журнала, вы должны не вызывать _next.Process(item).

Теперь включите его в набор служб, чтобы он был известен Application Insights. Для. Net Core это делается так:

public void ConfigureServices(IServiceCollection services)
        {
            ...

            services.AddApplicationInsightsTelemetry();
            services.AddApplicationInsightsTelemetryProcessor<ExceptionTelemetryFilter>();

            ...
        }

Примечание: способ регистрации процессора определяется типом приложения. См. Связанную документацию сверху для вариантов.

...