记录ASP.NET Web API 服务接口响应时间
实现起来很简单,一个Filter就可以搞定!!!
/// <summary> /// 监控接口执行时间 /// </summary> public class TimingActionFilter : ActionFilterAttribute { private static readonly Logger logger = LogManager.GetCurrentClassLogger(); private const string Key = "__action_duration__"; /// <summary> /// 启用计时器 /// </summary> /// <param name="actionContext"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public override Task OnActionExecutingAsync(HttpActionContext actionContext, CancellationToken cancellationToken) { /* await Trace.WriteAsync("Executing action named {0} for request {1}.", actionContext.ActionDescriptor.ActionName,actionContext.Request.GetCorrelationId()); */ if (SkipLogging(actionContext)) { return base.OnActionExecutingAsync(actionContext, cancellationToken); } var stopWatch = new Stopwatch(); actionContext.Request.Properties[Key] = stopWatch; stopWatch.Start(); return base.OnActionExecutingAsync(actionContext, cancellationToken); } /// <summary> /// 记录监控接口执行日志 /// </summary> /// <param name="actionExecutedContext"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public override Task OnActionExecutedAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken) { if (!actionExecutedContext.Request.Properties.ContainsKey(Key)) { return base.OnActionExecutedAsync(actionExecutedContext, cancellationToken); } var stopWatch = actionExecutedContext.Request.Properties[Key] as Stopwatch; if (stopWatch != null) { stopWatch.Stop(); var actionName = actionExecutedContext.ActionContext.ActionDescriptor.ActionName; var controllerName = actionExecutedContext.ActionContext.ActionDescriptor.ControllerDescriptor.ControllerName; string log = string.Format("[execution controller:{0} - action:{1} take {2} time.]", controllerName, actionName, stopWatch.Elapsed); #if DEBUG Debug.Print(log); #endif logger.Info(log); } return base.OnActionExecutedAsync(actionExecutedContext, cancellationToken); } private static bool SkipLogging(HttpActionContext actionContext) { return actionContext.ActionDescriptor.GetCustomAttributes<NoLogAttribute>().Any() || actionContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes<NoLogAttribute>().Any(); } } /// <summary> /// 不记录监控接口执行日志 /// </summary> [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true)] public class NoLogAttribute : Attribute { }
WebApiConfig中启用
public static void Register(HttpConfiguration config) { //启用监控接口执行时间 //config.Filters.Add(new TimingActionFilter()); //启用全局验证 config.Filters.Add(new ModelValidFilter()); //启用特性路由 config.MapHttpAttributeRoutes(); //默认路由 config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); }
配置NLog记录响应时间超过1秒的接口服务
<target name="database" xsi:type="Database" connectionString="Data Source=xxx;Initial Catalog=WebAPI_Log;Persist Security Info=True;User ID=xxx;Password=xxx" commandText="insert into [WebAPI_Log]([CreateOn],[Origin],[LogLevel], [Message], [Exception],[StackTrace]) values (getdate(), @origin, @logLevel, @message,@exception, @stackTrace);"> <!--日志来源--> <parameter name="@origin" layout="${callsite}"/> <!--日志等级--> <parameter name="@logLevel" layout="${level}"/> <!--日志消息--> <parameter name="@message" layout="${message}"/> <!--异常信息--> <parameter name="@exception" layout="${exception}" /> <!--堆栈信息--> <parameter name="@stackTrace" layout="${stacktrace}"/> </target>
Refer:
http://www.cnblogs.com/shanyou/p/3308058.html
http://stackoverflow.com/questions/14062028/how-to-intercept-all-the-asp-net-webapi-controller-action-methods-calls-with-nin
相关知识
生日花语API接口
花语箴言API接口
花娃API 接口文档
植物识别API接口
微信小程序之植物识别demo(百度开发接口)
百度接口实现花卉识别
最佳免费花品种识别API推荐与使用指南
Python 常用的标准库以及第三方库有哪些?
小米花花草草传感器API:让你的植物监测更智能
花语API接口
网址: 记录ASP.NET Web API 服务接口响应时间 https://www.huajiangbk.com/newsview535385.html
上一篇: 静态资源无法找到(No mapp |
下一篇: SpringBoot 统一时区的 |
推荐分享

- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039