Глобальный обработчик исключений в проекте AWS .net Core Lambda? - PullRequest
0 голосов
/ 27 февраля 2019

Упрощение - я создал пустой лямбда-проект AWS с .net CORE:

enter image description here

Это пустой проект лямбда-функции по умолчанию:

enter image description here

Я хочу перехватить все исключения в приложении по всему миру.

Итак, я создал метод, который генерирует исключение,и добавил глобальный обработчик приложения:

Полный код:

 public class Function
    {
        void CreateException()
        {
            var z = 0;
            var a = 2 / z;
            Console.Write(a);
        }

        public Function()
        {
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
        }

        public void FunctionHandler(object input, ILambdaContext context)
        {
            CreateException();
        }

        private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            // � It never gets here
        }

    }

Проблема состоит в том, что возникает исключение, но оно никогда не срабатывает CurrentDomain_UnhandledException

Вопрос:

Это правильный способ отловить глобальные исключения?и почему CurrentDomain_UnhandledException не вызывается, когда есть необработанное исключение?

1 Ответ

0 голосов
/ 05 марта 2019

Хотя я не могу ответить, почему это не работает, я могу сказать вам, что я сделал как обходной путь.

Обходной путь, который я использовал, заключается в том, чтобы обернуть мой FunctionHandler в попытке/ловить.Так как это единственная точка входа в лямбда-функции, все, что будет добавлено сюда, будет поймано ... эффективно действуя как глобальный обработчик для моих целей.

public void FunctionHandler(object input, ILambdaContext context)
{
    try
    {
        CreateException();
    }
    catch (Exception e)
    {
        // Handle your 'uncaught' exceptions here and/or rethrow if needed
        Console.WriteLine(e);
        throw;
     }
}

Вы, вероятно, захотите сбросить так, чтобы:

  1. AWS снова повторит функцию, затем вы можете отправить ее DeadLetterQueue после X попыток
  2. Вы получаете исключение в своих журналах CloudWatch
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...