如何记录Web Api 2中所有操作返回的所有内部服务器错误500错误?如何拦截错误以便能够记录堆栈跟踪?
答案 0 :(得分:8)
我只想保持简单并确保记录异常。
创建一个ExceptionFilter类,如下所示
public class ExceptionFilter : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
// actionExcutedContext.Exception is the exception log it however you wish
Log.Exception(actionExecutedContext.Exception);
actionExecutedContext.Response = actionExecutedContext.Request.CreateResponse(HttpStatusCode.InternalServerError, new
{
actionExecutedContext.Exception.Message
});
}
}
您还必须配置WebAPI以调用过滤器。这是在您创建配置时完成的。
config.Filters.Add(new ExceptionFilter());
Log.Exception
行只是我的帮助类,您可以根据自己的选择进行记录。
答案 1 :(得分:3)
您可以使用Elmah.MVC NuGet包。
ELMAH(错误记录模块和处理程序)是一个应用程序范围 错误日志记录工具,完全可插拔。有可能 动态添加到正在运行的ASP.NET Web应用程序,甚至全部 一台机器上的ASP.NET Web应用程序,无需任何操作 重新编译或重新部署。
一旦ELMAH被放入正在运行的Web应用程序中 如果配置得当,您将获得以下设施 更改代码的一行:
记录几乎所有未处理的异常。一个远程的网页 查看重新编码的异常的整个日志。远程查看的网页 任何一个记录异常的完整细节,包括彩色堆栈 痕迹。在许多情况下,您可以查看原始的黄色屏幕 ASP.NET为特定异常生成的死亡,即使是 customErrors模式已关闭。每个错误的电子邮件通知 它发生的时间。来自日志的最后15个错误的RSS提要。
在Web API项目中注册Elmah
后,您可以在Web应用程序中注册自定义过滤器,该过滤器将自动记录所有未经处理的例外情况。
public class UnhandledExceptionFilter : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext context)
{
//If you do not want to use Elmah, you can manually handle your ex here
Elmah.ErrorLog.GetDefault(HttpContext.Current).Log(new Elmah.Error(context.Exception));
}
}
您可以在WebApiConfig.cs
文件中注册此自定义过滤器。
config.Filters.Add(new UnhandledExceptionFilter());
配置完成后,您可以通过浏览根目录中的/elmah
路径来检查错误。 (您的应用程序是安全的,因为此路径将仅按照默认配置从托管计算机执行。)