通過日誌,記錄每個接口請求的耗時情況
結合 <logger name="*" level="Trace" writeTo="tracefile"/> 配置使用,NLog 熱生效不需要重啓服務
WebApi
Global.asax.cs
protected void Application_Start() { //增加Filter FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); FilterConfig.RegisterApiFilters(GlobalConfiguration.Configuration.Filters); }
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); } public static void RegisterApiFilters(HttpFilterCollection filters) { filters.Add(new ApiAciontFilter()); } } public class ApiAciontFilter : System.Web.Http.Filters.ActionFilterAttribute { Stopwatch sw = new Stopwatch(); RedisHelper Redis = RedisHelper.New(); public override void OnActionExecuting(HttpActionContext actionContext) { sw.Reset(); sw.Start(); } public override void OnActionExecuted(HttpActionExecutedContext filterContext) { sw.Stop(); try { var clientIp = GetIPAddress(filterContext.Request); string msg = string.Format("{0}, {1}, {2}, {3} MS", clientIp, filterContext.Response.StatusCode, filterContext.Request.RequestUri.AbsolutePath, sw.ElapsedMilliseconds); NLog.LogManager.GetCurrentClassLogger().Trace(msg);//正常日誌輸出 } catch (Exception e) { NLog.LogManager.GetCurrentClassLogger().Error(e, e.Message); } } public static string GetIPAddress(HttpRequestMessage request) { string ip = ""; try { if (request.Properties.ContainsKey("MS_HttpContext")) { ip = ((HttpContextWrapper)request.Properties["MS_HttpContext"]).Request.UserHostAddress; } } catch (Exception ex) { } if (ip == "::1") ip = "127.0.0.1"; return ip; } }