.net mvc 运行监控和错误捕捉

方法类

/// <summary>
    /// 运行监控类
    /// </summary>
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)]
    public class StatisticsTrackerAttribute : ActionFilterAttribute
    {
        private readonly string Key = "_thisOnActionMonitorLog_";

        #region Action运行监控
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            MonitorLog MonLog = new MonitorLog();
            MonLog.ExecuteStartTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.ffff", DateTimeFormatInfo.InvariantInfo));
            MonLog.ControllerName = filterContext.RouteData.Values["controller"] as string;
            MonLog.ActionName = filterContext.RouteData.Values["action"] as string;
            //获取Action的自定义属性
            var attributes = filterContext.ActionDescriptor.GetCustomAttributes(typeof(ActionDescribeAttribute), true);
            if (attributes != null && attributes.Length > 0)
            {
                ActionDescribeAttribute myAttribute = attributes[0] as ActionDescribeAttribute;
                if (myAttribute != null)
                {
                    MonLog.ActionInstructions = myAttribute.DisplayName;
                }
            }
            filterContext.Controller.ViewData[Key] = MonLog;
            base.OnActionExecuting(filterContext);

        }

        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            MonitorLog MonLog = filterContext.Controller.ViewData[Key] as MonitorLog;
            MonLog.ExecuteEndTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.ffff", DateTimeFormatInfo.InvariantInfo));
            MonLog.FormCollections = filterContext.HttpContext.Request.Form;//form表单提交的数据
            MonLog.QueryCollections = filterContext.HttpContext.Request.QueryString;//Url 参数
            MonLog.AbsoluteUri = filterContext.HttpContext.Request.Url.AbsoluteUri;
            base.OnActionExecuted(filterContext);
        }
        #endregion

        #region View 视图生成时间监控
        public override void OnResultExecuting(ResultExecutingContext filterContext)
        {
            MonitorLog MonLog = filterContext.Controller.ViewData[Key] as MonitorLog;
            MonLog.ResultExecuteStartTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.ffff", DateTimeFormatInfo.InvariantInfo));
            base.OnResultExecuting(filterContext);

        }
        public override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            MonitorLog MonLog = filterContext.Controller.ViewData[Key] as MonitorLog;
            MonLog.ResultExecuteEndTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.ffff", DateTimeFormatInfo.InvariantInfo));
            //写日志
            filterContext.Controller.ViewData.Remove(Key);
            MonLog.GetLoginfo();
            base.OnResultExecuted(filterContext);
        }

        #endregion

    }
    /// <summary>
    /// 程序运行错误  收集器
    /// </summary>
    [AttributeUsage(AttributeTargets.Class, Inherited = true, AllowMultiple = false)]
    public class LogExceptionAttribute : HandleErrorAttribute
    {
        public override void OnException(ExceptionContext filterContext)
        {
            if (!filterContext.ExceptionHandled)
            {
                try
                {
                    string sForm = this.GetCollections(filterContext.HttpContext.Request.Form);
                    string sQuery = this.GetCollections(filterContext.HttpContext.Request.QueryString);
                    string ControllerName = string.Format("{0}Controller", filterContext.RouteData.Values["controller"] as string);
                    string ActionName = filterContext.RouteData.Values["action"] as string;
                    string message = string.Format(@"
                                    在执行 controller[{0}] 的 action[{1}] 时产生异常。
                                    异常类型:{2}
                                    <br>异常内容:{3}
                                    <br>引发异常的方法:{4}
                                    <br>引发异常源:{5}
                                    <br>参数:{6}"
                        , ControllerName
                        , ActionName
                    , filterContext.Exception.GetType().Name
                    , filterContext.Exception.Message
                     , filterContext.Exception.TargetSite
                     , filterContext.Exception.Source + filterContext.Exception.StackTrace
                     , sForm + sQuery
                     );
                    //记录日志
                    LoggerBusiness.WriteLog(message, "Web程序运行错误");
                }
                catch (Exception)
                {

                }

                base.OnException(filterContext);
            }
        }

        /// <summary>
        /// 获取Post 或Get 参数
        /// </summary>
        /// <param name="Collections"></param>
        /// <returns></returns>
        public string GetCollections(NameValueCollection Collections)
        {
            string Parameters = string.Empty;
            if (Collections == null || Collections.Count == 0)
            {
                return Parameters;
            }
            foreach (string key in Collections.Keys)
            {
                Parameters += string.Format("{0}:{1};", key, Collections[key]);
            }
            if (!string.IsNullOrWhiteSpace(Parameters) && Parameters.EndsWith(";"))
            {
                Parameters = Parameters.Substring(0, Parameters.Length - 1);
            }
            return Parameters;
        }
    }

 /// <summary>
    /// 描述属性
    /// </summary>
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)]
    public class ActionDescribeAttribute : Attribute
    {
        public string DisplayName { get; set; }

        public ActionDescribeAttribute()
        {
            this.DisplayName = "";
        }

使用方法

 1    [StatisticsTrackerAttribute]
 2     [LogException]
 3     public class ManageController : Controller
 4     {
 5         //
 6         // GET: /Manage/
 7         [ActionDescribe(DisplayName="加载首页")]
 8         public ActionResult Index()
 9         {
10             return View();
11         }
12     }

时间: 2024-08-12 18:42:58

.net mvc 运行监控和错误捕捉的相关文章

Python 之try...except...错误捕捉

导入:lib下面的模块文件可以直接导入,如果不是就要指明路径import class_test #具体到模块名class_test.add(2, 5) import 具体到函数名from class_test import add, sub, ...add(5, 6) 测试代码 放在if下面if __name__ == '__main__': #执行程序的主入口 print("今天天气不错!") # 只有当你在当前模块下执行代码的时候才会执行这里面的代码 import timetime

发布mvc遇到的HTTP错误 403.14-Forbidden解决办法

今天在云服务器上部署MVC项目爆出 HTTP错误 403.14-Forbidden,最终在网上找到解决方案,具体步骤如下: 1.webconfig中添加: <system.webServer>   <validationvalidateIntegratedModeConfiguration="false"/>   <modules runAllManagedModulesForAllRequests="true" /> </

MVC运行机制[转]

原:http://www.cnblogs.com/jyan/archive/2012/06/29/2569566.html#3122335 ASP.NET是一种建立动态Web应用程序的技术.它是.NET框架的一部分,可以使用任何.NET兼容的语言编写ASP.NET应用程序.相对于Java.PHP等,ASP.NET具有方便性.灵活性.性能优.生产效率高.安全性高.完整性强及面向对象等特性,是目前主流的网络编程技术之一.它可以让开发者快速高效的创建应用程序而不必关注Http,Html,Javascr

VBA 自动关闭 弹出的对话框 + VBA错误捕捉

自动关闭 Msgbox对话框: Private Declare Function MsgBoxEx Lib "user32" Alias "MessageBoxTimeoutA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As VbMsgBoxStyle, ByVal wlange As Long, ByVal dwTimeout As Lo

电力项目七--运行监控中添加进度条

<%@ page language="java" pageEncoding="UTF-8"%> <%@taglib uri="/struts-tags" prefix="s" %> <!-- 添加标签,然后做栈顶获取数据 --> <html> <head> <title>运行监控模块编辑</title> <link href="

电力项目八--运行监控的保存

需求分析:保存运行监控文本内容到数据库,并再次查询后回显. 页面中调用保存的函数 function checkchar(){ if(document.Form2.stationRun.value.length>2500){ alert("站点运行情况字数不能超过2500字"); return; } if(document.Form2.devRun.value.length>2500){ alert("设备运行情况字数不能超过2500字"); return

JBPM在Eclipse中运行时页面错误ProcessEngine cannot be resolved to a type

JBPM在Eclipse中运行时页面错误ProcessEngine cannot be resolved to a type 从网上找了一些杂七杂八的回答,比如在Java EE Module Dependencies设置中添加依赖的jar 但是这个设置是以前旧版本的Eclipse所有的.新版的已经没有这个设置. 归根结底是因为我自己创建了一个UserLibrary.引入了jbpm依赖的所有jar 结果无法发布到tomcat中. 干脆把这个引用删掉,直接复制所有jar到项目的lib文件夹下. 一切

Python脚本运行出现语法错误:IndentationError: unindent does not match any outer indentation level

[问题] 一个python脚本,本来都运行好好的,然后写了几行代码,而且也都确保每行都对齐了,但是运行的时候,却出现语法错误: IndentationError: unindent does not match any outer indentation level [解决过程] 1.对于此错误,最常见的原因是,的确没有对齐.但是我根据错误提示的行数,去代码中看了下,没啥问题啊. 都是用TAB键,对齐好了的,没有不对齐的行数啊. 2.以为是前面的注释的内容影响后面的语句的语法了,所以把前面的注释

MFC:“Debug Assertion Failed!” ——自动生成的单文档程序项目编译运行就有错误

今天照着孙鑫老师的VC++教程学习文件的操作,VS2010,单文档应用程序,项目文件命名为File,也就有了自动生成的CFileDoc.CFileView等类,一进去就编译运行(就是最初自动生成的项目),编译通过,可运行时直接弹出错误框,有点小懵,,,啥都没做就给我看这个: 图一   错误提示框 后来搜索一查,网上好多类似的错误以及解决方案,几乎都试了个遍,有: 方法(1)-重新生成解决方案,或者将项目文件目录下Debug文件夹删了,重新生成Release版: 方法(2)-可以先声明一个临时的C