ErrHdlEventLogClass:
該類是將錯誤信息寫入系統日志的具體實現類,該類繼承自AbstractHandleClass。用戶在自定義錯誤處理方式的時候,便可仿照該類來設計。具體代碼如下:
public class ErrHdlEventLogClass: AbstractHandleClass
{
public const int ID = 2; //錯誤處理方式的序號
public ErrHdlEventLogClass()
{
//
// TODO: Add constructor logic here
//
}
//重載了父類的方法,具體實現對錯誤信息的處理動作
public override int HandleError(ErrorMsgClass emsg)
{
if(this.HandleFlag(emsg,ID)) //判斷是否進行處理
{
try
{
EventLog el = new EventLog();
el.Source = emsg.hash["EventLogSource"].ToString();
el.WriteEntry(fmt.Format(emsg),EventLogEntryType.Error);
return 0;
}
catch
{
return 1; //處理失敗
}
}
else
{
return 9999; //用戶未選擇該種處理方式
}
}
}
ErrHdlMailClass:
該類是將錯誤信息通過郵件發送的具體實現類。具體代碼如下:
public class ErrHdlMailClass: AbstractHandleClass
{
public const int ID = 5;
public ErrHdlMailClass()
{
//
// TODO: Add constructor logic here
//
}
public override int HandleError(ErrorMsgClass emsg)
{
if(this.HandleFlag(emsg,ID))
{
try
{
MailMessage mail = new MailMessage();
mail.From = emsg.hash["MailFrom"].ToString();
mail.To = emsg.hash["MailTo"].ToString();
mail.Subject = emsg.hash["MailSubject"].ToString();
mail.BodyFormat = MailFormat.Text;
mail.Body = fmt.Format(emsg);
SmtpMail.Send(mail);
return 0;
}
catch
{
return 1;
}
}
else
{
return 9999;
}
}
}
--------------------------------------------------------------------------------
客戶端調用方式
以下是在用戶的Application中調用該錯誤處理機制的實現代碼:
ErrorHandleClass err = ErrorHandleClass.GetSingleton();//獲得錯誤處理類的實例
ErrorMsgClass emsg = new ErrorMsgClass(); //創建該錯誤信息的實例
emsg.hash.Add("MailFrom","lu224@oki.com"); //添加MailFrom信息
emsg.hash.Add("MailTo","lu224@oki.com"); //添加MailTo信息
emsg.hash.Add("MailSubject","A Test!");
emsg.hash["Assembly"] = "AssemblyName"; //錯誤所在的組件名稱
emsg.hash["Class"] = "ClassName"; //錯誤所在的類名
emsg.hash["ErrorCode"] = 1112; //錯誤代碼
emsg.hash["ErrorMessage"] = “Error message”; //錯誤信息
emsg.hash["Function"] = "FunctionName"; //錯誤所在的函數名
emsg.hash["Mode"] = Global.Mail; //設置錯誤處理方式
int t = err.HandleError(emsg); //執行錯誤處理
--------------------------------------------------------------------------------
總結
本文介紹了一種輪詢方式的錯誤處理機制的實現模型。該機制的優點是可以對錯誤處理的兩方面通過繼承進行定制。一是錯誤處理的方法,常見的方法有寫入系統日志、發送郵件、寫入日志文件、彈出錯誤信息框、寫入數據庫等等。該機制可以將這些方法都預先設計好,讓用戶進行選擇(可進行多重選擇),假如用戶希望的方法不在定義中,用戶只須繼承AbstractHandleClass,即可自己來設計錯誤的處理方式。二是錯誤信息的格式,用戶如果不習慣默認的錯誤信息輸出格式,那么繼承AbstractMessageFormatClass,即可自己定制錯誤信息的輸出格式和內容。
|