在Elmah中记录Azure函数的错误

时间:2018-01-15 04:34:29

标签: c# azure azure-functions

这是我如何在Webjobs中启用错误记录:

public static class ElmahExtension
    {
        public static void LogToElmah(this Exception ex)
        {
            if (HttpContext.Current != null)
            {
                ErrorSignal.FromCurrentContext().Raise(ex);
            }
            else
            {
                if (httpApplication == null) InitNoContext();
                ErrorSignal.Get(httpApplication).Raise(ex);
            }
        }

        private static HttpApplication httpApplication = null;
        private static ErrorFilterConsole errorFilter = new ErrorFilterConsole();

        public static ErrorMailModule ErrorEmail = new ErrorMailModule();
        public static ErrorLogModule ErrorLog = new ErrorLogModule();
        public static ErrorTweetModule ErrorTweet = new ErrorTweetModule();

        private static void InitNoContext()
        {
            httpApplication = new HttpApplication();
            errorFilter.Init(httpApplication);

            (ErrorEmail as IHttpModule).Init(httpApplication);
            errorFilter.HookFiltering(ErrorEmail);

            (ErrorLog as IHttpModule).Init(httpApplication);
            errorFilter.HookFiltering(ErrorLog);

            (ErrorTweet as IHttpModule).Init(httpApplication);
            errorFilter.HookFiltering(ErrorTweet);
        }

        private class ErrorFilterConsole : ErrorFilterModule
        {
            public void HookFiltering(IExceptionFiltering module)
            {
                module.Filtering += new ExceptionFilterEventHandler(base.OnErrorModuleFiltering);
            }
        }
    }

如何在Azure functions app项目中设置Elmah日志记录,并显示错误发生的行号信息?

注意: Azure函数从单独引用的程序集[服务项目]中调用函数。

1 个答案:

答案 0 :(得分:2)

ELMAH不是为Azure功能构建的。据我所知,在函数中以正常方式设置ELMAH记录是不可能的。您几乎可以通过代码配置ELMAH(在此处进行实验:Configure elmah.io from code),但您需要将代码添加到web.config,这是不可用的。

您可以尝试的一件事是ELMAH bootstrapper。它会在启动时自动注册ELMAH。我没有尝试过功能,但它可能值得一试。

我也想快速提及Microsoft.Extensions.Logger。函数实际上支持注入ILogger,但是现在它会记录到磁盘或Application Insights。在未来,这可能会扩展到支持第三方目的地。你应该留意https://github.com/Azure/azure-webjobs-sdk-script/issues/1579