首页 新闻 会员 周边

如何在ASP.NET Web API中通过日志记录所有未处理异常

0
悬赏园豆:30 [已解决问题] 解决于 2016-07-13 13:42

在 ASP.NET MVC 中可以在 Application_Error 中写日志,在 ASP.NET Web API 中该如何处理呢?

dudu的主页 dudu | 高人七级 | 园豆:30994
提问于:2016-07-13 11:29
< >
分享
最佳答案
0

自定义IExceptionLogger

收获园豆:30
蝌蝌 | 初学一级 |园豆:158 | 2016-07-13 11:31

基于IExceptionLogger的解决方法。

定义一个自己的ExceptionLogger,比如BlogExceptionLogger,继承自ExceptionLogger,重载LogAsync()方法:

public class BlogExceptionLogger : ExceptionLogger
{
    public override Task LogAsync(ExceptionLoggerContext context, 
        CancellationToken cancellationToken)
    {
        Logger.Default.Error("Web API Exception", context.Exception);
        return base.LogAsync(context, cancellationToken);
    }
}

然后在Global.asax.cs的Application_Start()方法中应用这个BlogExceptionLogger:

var config = GlobalConfiguration.Configuration;
config.Services.Add(typeof(IExceptionLogger), new BlogExceptionLogger());
dudu | 园豆:30994 (高人七级) | 2016-07-13 13:41
其他回答(2)
0

全局异常过滤器可以抓到webapi里面的异常.管道外面的就只能用管理事件了.webapi应该也是可以注册Application_Error事件的.用owin的话应该也有对应的异常处理事件

吴瑞祥 | 园豆:29449 (高人七级) | 2016-07-13 11:35
0

基于ExceptionFilterAttribute的解决方法。

定义一个自己的ExceptionFilter继承自ExceptionFilterAttribute,并重载OnExceptionAsync()方法,在其中写日志,代码如下:

public class BlogExceptionFilter : ExceptionFilterAttribute
{
    public override Task OnExceptionAsync(
        HttpActionExecutedContext actionExecutedContext, 
        CancellationToken cancellationToken)
    {
        Logger.Default.Error("Web API Exception", actionExecutedContext.Exception);
        return base.OnExceptionAsync(actionExecutedContext, cancellationToken);
    }
}

然后在Global.asax.cs的Application_Start()方法中添加这个ExceptionFilter:

var config = GlobalConfiguration.Configuration;
config.Filters.Add(new BlogExceptionFilter());
dudu | 园豆:30994 (高人七级) | 2016-07-13 13:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册