码迷,mamicode.com
首页 > 其他好文 > 详细

Action执行时间过滤器

时间:2018-02-04 21:14:39      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:manager   get   pos   class   ase   items   result   ilog   mat   

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

 

Action执行时间过滤器

标签:manager   get   pos   class   ase   items   result   ilog   mat   

原文地址:https://www.cnblogs.com/zhshlimi/p/8413860.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!