Sam*_*ach 6 logging interceptor asp.net-web-api asp.net-web-api2
如何记录Web Api 2中所有操作返回的所有内部服务器错误500错误?如何拦截错误以便能够记录堆栈跟踪?
我只是想保持简单,并确保我记录了异常.
创建一个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
});
}
}
Run Code Online (Sandbox Code Playgroud)
您还必须配置WebAPI以调用过滤器.这是在创建配置时完成的.
config.Filters.Add(new ExceptionFilter());
Run Code Online (Sandbox Code Playgroud)
该Log.Exception行只是我的帮助类,您可以根据自己的选择进行记录.
您可以使用Elmah.MVC NuGet 包。
ELMAH(错误记录模块和处理程序)是一个完全可插入的应用程序范围的错误记录工具。它可以动态添加到正在运行的 ASP.NET Web 应用程序,甚至机器上的所有 ASP.NET Web 应用程序,而无需重新编译或重新部署。
将 ELMAH 放入正在运行的 Web 应用程序并进行适当配置后,您无需更改任何代码即可获得以下功能:
记录几乎所有未处理的异常。用于远程查看记录的异常的整个日志的网页。一个网页,用于远程查看任何记录的异常的完整详细信息,包括彩色堆栈跟踪。在许多情况下,即使关闭了 customErrors 模式,您也可以查看 ASP.NET 为给定异常生成的原始黄屏死机。每个错误发生时的电子邮件通知。日志中最后 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));
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在文件中注册此自定义过滤器WebApiConfig.cs。
config.Filters.Add(new UnhandledExceptionFilter());
Run Code Online (Sandbox Code Playgroud)
/elmah配置完成后,您可以通过从根目录浏览路径来检查错误。(您的应用程序是安全的,因为该路径只能根据默认配置从托管计算机执行)。
