Global exception handler in AWS .net Core Lambda project?

时间:2019-02-27 10:30:06

标签: c# amazon-web-services exception .net-core aws-lambda

Simplification — I've created an empty AWS Lambda project with .net CORE :

enter image description here

这是默认的空lambda函数项目:

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 :(得分:2)

虽然我无法回答为何无法解决问题,但我可以告诉您我已经作为解决方法完成了。

我使用的解决方法是将我的 FunctionHandler 包装在try / catch中。由于这是lambda函数中唯一的入口点,因此任何抛出在这里的东西都会被捕获……就我的目的而言,它的作用就像是全局处理程序。

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将再次重试该功能,然后您可以在X重试后将其发送给DeadLetterQueue
  2. 您在CloudWatch Logs中遇到异常