ASP.NET WebApi IExceptionLogger不捕获exception

我正在尝试设置如下所述的全局exception处理程序: Web API全局error handling 。 我设置了一个在控制器构造函数中抛出exception的情况。但是我的exception没有被记录。相反,WebApi只是将exception和完整堆栈跟踪作为JSON消息返回给调用客户端。

我不知道它是否重要,但我的控制器操作正在使用async / await,如下所示:

[HttpGet, Route("GetLocationNames")] public async Task<IEnumerable> Get() { return await adapter.GetLocationNames(); } 

我有以下实现:

 using log4net; using System.Threading.Tasks; using System.Web.Http.ExceptionHandling; namespace warehouse.management.api { public class Log4NetExceptionLogger : ExceptionLogger { private ILog log = LogManager.GetLogger(typeof(Log4NetExceptionLogger)); public async override Task LogAsync(ExceptionLoggerContext context, System.Threading.CancellationToken cancellationToken) { log.Error("An unhandled exception occurred.", context.Exception); await base.LogAsync(context, cancellationToken); } public override void Log(ExceptionLoggerContext context) { log.Error("An unhandled exception occurred.", context.Exception); base.Log(context); } public override bool ShouldLog(ExceptionLoggerContext context) { return base.ShouldLog(context); } } } 

我正在这样注册:

 using Owin; using System.Web.Http; using System.Web.Http.ExceptionHandling; namespace warehouse.management.api.Config { public static class WebApiConfig { public static IAppBuilder RegisterApiConfig(this IAppBuilder app, HttpConfiguration config) { config.MapHttpAttributeRoutes(); config.Services.Add(typeof(IExceptionLogger), new Log4NetExceptionLogger()); return app; } } } 

这是我的packages.conf:

                

事实certificate这是订单。 在我的启动类(未显示)中,我将调用移动到我的RegisterApiConfig方法(上面,在OP中)到我调用UseWebApi之前,现在它可以正常工作。