这是我如何在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函数从单独引用的程序集[服务项目]中调用函数。
答案 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。