方法类

/// <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 > )
{
ActionDescribeAttribute myAttribute = attributes[] 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 == )
{
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(, Parameters.Length - );
}
return Parameters;
}
} /// <summary>
/// 描述属性
/// </summary>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)]
public class ActionDescribeAttribute : Attribute
{
public string DisplayName { get; set; } public ActionDescribeAttribute()
{
this.DisplayName = "";
}

使用方法

    [StatisticsTrackerAttribute]
[LogException]
public class ManageController : Controller
{
//
// GET: /Manage/
[ActionDescribe(DisplayName="加载首页")]
public ActionResult Index()
{
return View();
}
}

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

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

    Python常见异常类型大概分为以下类: 1.AssertionError:当assert断言条件为假的时候抛出的异常 2.AttributeError:当访问的对象属性不存在的时候抛出的异常 3.I ...

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

    发布mvc遇到的HTTP错误 403.14-Forbidden解决办法   <system.webServer>   <validationvalidateIntegratedMod ...

  3. MVC运行机制[转]

    原:http://www.cnblogs.com/jyan/archive/2012/06/29/2569566.html#3122335 ASP.NET是一种建立动态Web应用程序的技术.它是.NE ...

  4. myeclipse 10的破解以及运行run.bat错误或者双击立即消失的问题

    安装包下载: ed2k://|file|[myeclipse.10.0.更新发布].myeclipse-10.0-offline-installer-windows.exe|947752488|73b ...

  5. ASP.NET MVC 学习1、新增Controller,了解MVC运行机制

    1,turorial ,根据链接教程新建一个MVC项目 http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/ ...

  6. IIS6配置Asp.net MVC运行环境

    Windows server 2003 + IIS6 搭建Asp.net MVC运行环境 1.安装.Net Framework4.0. 下载地址: http://www.microsoft.com/z ...

  7. Asp.net mvc 自定义全局的错误事件HandleErrorAttribute无效

    Asp.net mvc 自定义全局的错误事件HandleErrorAttribute,结果无效, 原因: 1.没有在RegisterGlobalFilters 里面添加或者你要的位置添加. 2.你把这 ...

  8. NET MVC运行机制

    [图解ASP.NET MVC运行机制理解-简易版]   很多盆友咨询ASP.NET MVC的机制.网上也有好多.但是都是相当深奥.看的云里雾里的.我今天抽空,整理个简易版本.把处理流程走一遍. 当然, ...

  9. MVC验证06-自定义错误信息

    原文:MVC验证06-自定义错误信息 本文体验自定义错误信息.   系统默认的错误信息 在"MVC验证02-自定义验证规则.邮件验证"中,我们自定义了一个验证Email的类.如果输 ...

随机推荐

  1. ie6不支持png图片的解决办法

    在head里引入png.js文件 <!--[if lte IE 6]> <script type="text/javascript" src="js/P ...

  2. 51NOD 1821 最优集合 栈

    1821 最优集合   一个集合S的优美值定义为:最大的x,满足对于任意i∈[1,x],都存在一个S的子集S',使得S'中元素之和为i. 给定n个集合,对于每一次询问,指定一个集合S1和一个集合S2, ...

  3. C 项目案例实践(1)数据结构之链表(0)

    链表是通过一组任意的存储单元来存储线性表中的数据元素的,那么怎样表示出数据元素之间的线性关系呢?为建立数据元素之间的线性关系,对每个数据元素ai,除了存放数据元素的自身信息ai之外,还需要存放和ai一 ...

  4. intellij IDEA破解

    方法1 填入下面的license server: http://intellij.mandroid.cn/ http://idea.imsxm.com/ http://idea.iteblog.com ...

  5. 高负载linux调优

    调整Linux内核参数: # vi /etc/sysctl.conf# tells the Kernel it's ok if services bind to non-existant IP ADD ...

  6. HDU3038 How Many Answers Are Wrong —— 带权并查集

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3038 How Many Answers Are Wrong Time Limit: 200 ...

  7. Local Databases with SQLiteOpenHelper

    Overview For maximum control over local data, developers can use SQLite directly by leveraging SQLit ...

  8. robotframework收藏

    收藏文章 http://www.360doc.com/userhome/38592059

  9. 使用x-template 定义模板

    demo <script type="text/x-template" id="myFirstScriptComponent"> <p> ...

  10. 计算属性computed 与methods

    你可能已经注意到我们可以通过调用表达式中的 method 来达到同样的效果: <p>Reversed message: "{{ reversedMessage() }}" ...