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;
        } 
    }
  • 相关阅读:
    泛型接口与NUnit初试
    异步文件IO的应用
    [Andrew McAfee]Enterprise 2.0下的大趋势
    silverlight
    扩展prototype库兼容w3c domajax for firefox
    开张了
    最长平台
    常见C/C++ XML解析器比较
    GIS地图开发
    几种常见 容器 比较和分析 hashmap, map, vector, list ...hash table
  • 原文地址:https://www.cnblogs.com/vipsoft/p/15740069.html
Copyright © 2011-2022 走看看