zoukankan      html  css  js  c++  java
  • WebApi 接口请求耗时记录

    通过日志,记录每个接口请求的耗时情况

    结合  <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;
        } 
    }
  • 相关阅读:
    构造方法
    方法调用时参数传递问题
    空指针异常
    Go安装,配置
    干货-MySQL
    websocket
    Tornado的使用
    socket客户端异步、socket服务端异步
    celery分布式队列实现:实时显示任务执行到哪一步
    celery+django实践
  • 原文地址:https://www.cnblogs.com/vipsoft/p/15740069.html
Copyright © 2011-2022 走看看