Web API 2.1和NLog中的全局exception处理

在Web API 2.1中是新的全局error handling 。 我发现了一些例子,如何将exceptionlogging到Elmah( elmah示例 )中。 但是我使用NLog将错误logging到数据库表中。 使用NLog的Web API全局error handling是否可行? 请举一些例子。

其实很简单,你可以手动实现IExceptionLogger ,也可以inheritance基类ExceptionLogger

 public class NLogExceptionLogger : ExceptionLogger { private static readonly Logger Nlog = LogManager.GetCurrentClassLogger(); public override void Log(ExceptionLoggerContext context) { Nlog.LogException(LogLevel.Error, RequestToString(context.Request), context.Exception); } private static string RequestToString(HttpRequestMessage request) { var message = new StringBuilder(); if (request.Method != null) message.Append(request.Method); if (request.RequestUri != null) message.Append(" ").Append(request.RequestUri); return message.ToString(); } } 

还要把它添加到configuration中:

 var config = new HttpConfiguration(); config.Services.Add(typeof(IExceptionLogger), new NLogExceptionLogger()); 

你可以在这里find完整的样本解

其他可能方便的WebApiContrib.Tracing.NLog软件包允许您使用ITraceWriter接口输出到带有NLog的日志。 关于ITraceWriter的一个很酷的事情是:“所有的跟踪都可以与导致代码运行的单个请求相关联(请参阅此链接 )