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的一个很酷的事情是:“所有的跟踪都可以与导致代码运行的单个请求相关联(请参阅此链接 )
- 我是否需要一个Global.asax.cs文件,如果我正在使用一个OWIN Startup.cs类并移动所有的configuration?
- 使用<optgroup>为asp.net(webforms)的下拉列表控件?
- Visual Studio 2013.您没有足够的权限访问您的计算机上的IIS网站
- SQL Server的默认端口
- 当使用.net MVC RadioButtonFor(),你如何分组,所以只能做出一个select?
- 在Framework 3.5中设置服务器标记<%=%>的Visible属性
- 在ASP.NET MVC中,我如何使用C#代码中的Razor @ Url.Content()助手?
- 在ASP.NET MVC中显示来自另一个控制器的视图
- 如何退出Mac上的ASP.NET Kestrel Web服务器