zoukankan      html  css  js  c++  java
  • Action执行时间过滤器

    public class AccessStatisticsAttribute : ActionFilterAttribute
        {
            /// <summary>
            /// log4net 日志
            /// </summary>
            private static readonly ILog Logger = LogManager.GetLogger(typeof(AccessStatisticsAttribute));
    
            /// <summary>
            /// 该Action对应的权限项名称
            /// </summary>
            private readonly string _actionName;
    
            /// <summary>
            /// 该Action对应的权限项名称
            /// </summary>
            private readonly bool _logResult;
    
            /// <summary>
            /// .ctor
            /// </summary>
            public AccessStatisticsAttribute(string actionName, bool logTheResult = false)
            {
                this._actionName = actionName;
                this._logResult = logTheResult;
            }
    
            /// <summary>
            /// 提供一个入口点用于进行自定义授权检查
            /// </summary>
            /// <param name="filterContext">HTTP 上下文,它封装有关单个 HTTP 请求的所有 HTTP 特定的信息。</param>
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                GetSessionTimer(filterContext).Start();
                base.OnActionExecuting(filterContext);
            }
    
            /// <summary>
            /// OnActionExecuted
            /// </summary>
            /// <param name="filterContext"></param>
            public override void OnActionExecuted(ActionExecutedContext filterContext)
            {
                var stopwatch = GetSessionTimer(filterContext);
                stopwatch.Stop();
                var result = this._logResult ? filterContext.Result.ToJsonNoneFormat() : string.Empty;
    
                if (stopwatch.Elapsed.TotalMilliseconds > ActionHelper.ElapsedMillisecondsLimit)
                {
                    Logger.InfoFormat("OUT : {0} {1} {2}ms {3}s", _actionName, result, (uint)stopwatch.Elapsed.TotalMilliseconds, (uint)stopwatch.Elapsed.TotalSeconds);
                }
    
                base.OnActionExecuted(filterContext);
            }
    
            
            private Stopwatch GetSessionTimer(ControllerContext context, string name = "actionElapse")
            {
                string key = name + "timer";
                if (context.HttpContext.Items.Contains(key))
                {
                    return (Stopwatch)context.HttpContext.Items[key];
                }
    
                var result = new Stopwatch();
                context.HttpContext.Items[key] = result;
                return result;
            }
        }
  • 相关阅读:
    Java中IO软件包的详细介绍
    Java中IO软件包的详细介绍
    Java中输入时IO包与Scanner的区别
    Java中输入时IO包与Scanner的区别
    Java中输入时IO包与Scanner的区别
    Java中输入时IO包与Scanner的区别
    Java中输入时IO包与Scanner的区别
    虚拟桌面技术的初步探讨
    C语言程序的内存布局
    用汇编语言给XP记事本添加“自动保存”功能 good
  • 原文地址:https://www.cnblogs.com/zhshlimi/p/8413860.html
Copyright © 2011-2022 走看看