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;
    } 
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章