项目统一错误捕获
一个项目总要记录系统运行中产生的错误,所以应该有统一的调用方法,即可以记录重要的系统错误,又可以根据错误做相应的友好提示页面,在开发过程中又可以直接抛出错误,简单明了的提示系统错误的原因。
下面是我们项目中的一个应用方法。
定义一个错误的Class,声明一个事件,在Application start进行绑定处理。
/// <summary>
/// 错误代理
/// </summary>
public delegate void ErrorEventHandler(object objExInfo,Exception err,string strMsg);
/// <summary>
/// ErrorManage 的摘要说明。
/// </summary>
public class ErrorManage
{
/// <summary>
///
/// </summary>
// public ErrorManage()
// {
//
// }
private static ErrorManage _ErrorManage;
/// <summary>
///
/// </summary>
public static ErrorManage Current
{
get
{
if( _ErrorManage == null )
{
_ErrorManage = new ErrorManage();
}
return _ErrorManage;
}
}
/// <summary>
/// 错误触发的事件
/// </summary>
public event ErrorEventHandler OnError;
/// <summary>
/// 通过触发事件记录异常信息(绑定事件在Application_Start)
/// </summary>
/// <param name="errObj">发生异常的页面</param>
/// <param name="err">异常对象</param>
public virtual void LogError(Object errObj ,Exception err)
{
if(OnError != null)
{
OnError(errObj,err,err.Message);
}
System.Diagnostics.Debug.WriteLine(errObj + err.ToString());
}
/// <summary>
///
/// </summary>
/// <param name="errObj"></param>
/// <param name="err"></param>
/// <param name="Msg"></param>
public virtual void LogError(Object errObj ,Exception err,string Msg)
{
if(OnError != null)
{
OnError(errObj,err,Msg);
}
System.Diagnostics.Debug.WriteLine(errObj + err.ToString());
}
}
调用方式如下:
protected void Application_Start(Object sender, EventArgs e)
{
ErrorManage.Current.OnError += new ErrorEventHandler(System_OnError);
}
/// <summary>
/// 记录异常信息
/// </summary>
/// <param name="objExInfo">发生异常的页面</param>
/// <param name="err">异常对象</param>
/// <param name="strMsg">异常消息</param>
private void System_OnError(object objExInfo,Exception err,string strMsg)
{
//根据你项目的需要,自定义处理
}
在项目开发过程中,有几点好处。
1.如果哪里发生异常,就直接抛出异常,界面就知道是哪里错误了,有利于直接找到错误点,而不用一步一步进行调试找错误。
2.可以加个自定义的异常类,根据异常类的描述,进行相应的错误记录跟友好页面提示。
3.可以随意关闭是否记录错误的日志。