一步一步教你實現簡單的自定義錯誤跟蹤

作者: 麒麟  來源: 博客園  發布時間: 2010-01-29 11:35  閱讀: 1323 次  推薦: 0   原文鏈接   [收藏]  

一、設計xml,應該包含下面信息:

1、Datetime:  發生錯誤/異常的日期和時間
2、File name: 發生錯誤/異常的文件名
3、Class name : 發生錯誤/異常的類名
4、Methodname: 發生錯誤/異常的方法名
5、Errormethod :  包含錯誤代碼的函數名字
6、Message :錯誤/異常的信息
7、Error details: 錯誤/異常詳情
8、IP : 客戶端IP地址
9、URL : 發生錯誤的URL

DemoXML:

DemoXML
xml version="1.0" encoding="utf-8"?>
<errorlog>
  <error>
    <datetime>datetimedatetime>
    <filename>filenamefilename>
    <classname>classnameclassname>
    <methodname>methodnamemethodname>
    <errormethod>errormethoderrormethod>
    <messsage>ErrorMessagemesssage>
    <errordetails>Details goes hereerrordetails>
    <IP>IP adressIP>
    <url>URLurl>
  error>
errorlog>

二、設計錯誤處理類:errorHandler.cs,里面的WriteError方法需要Exception和FileName兩個參數:

errorHandler.cs
using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Xml; 
using System.Reflection; 
using System.Diagnostics; 
namespace code_center 

    
public class errorHandler 
    { 
        
string _strErrorMessage, _strDetails, _strClassName, _strMethodName; 
        DateTime _dtOccuranceTime 
= new DateTime(); 
        
public errorHandler() 
        { 
        } 
        
public errorHandler(DateTime time, string className, string methodName,
            
string errorMessage, string details) 
        { 
            _dtOccuranceTime 
= time; 
            _strClassName 
= className; 
            _strDetails 
= details; 
            _strErrorMessage 
= errorMessage; 
            _strMethodName 
= methodName; 
        } 
        
public static void WriteError(Exception ex) 
        { 
            WriteError(ex, 
""); 
        } 
        
public static void WriteError(Exception ex, string fileName) 
        { 
            XmlDocument doc 
= new XmlDocument(); 
            
string strRootPath =
           System.Configuration.ConfigurationManager.AppSettings["logfilepath"].ToString(); 
            
string xmlPath = System.Web.HttpContext.Current.Server.MapPath(strRootPath); 
            doc.Load(@xmlPath); 
            XmlNode newXMLNode, oldXMLNode; 
            oldXMLNode 
= doc.ChildNodes[1].ChildNodes[0]; 
            newXMLNode 
= oldXMLNode.CloneNode(true); 
            StackTrace stackTrace 
= new StackTrace(); 
            StackFrame stackFrame 
= stackTrace.GetFrame(1); 
            MethodBase methodBase 
= stackFrame.GetMethod(); 
            newXMLNode.ChildNodes[
0].InnerText = DateTime.Now.ToString(); 
            newXMLNode.ChildNodes[
1].InnerText = fileName; 
            newXMLNode.ChildNodes[
2].InnerText = methodBase.DeclaringType.FullName; 
            newXMLNode.ChildNodes[
3].InnerText = methodBase.Name; 
            newXMLNode.ChildNodes[
4].InnerText = ex.TargetSite.Name; 
            newXMLNode.ChildNodes[
5].InnerText = ex.Message; 
            newXMLNode.ChildNodes[
6].InnerText = ex.StackTrace; 
            newXMLNode.ChildNodes[
7].InnerText = System.Web.HttpContext.Current.Request.UserHostAddress; 
            newXMLNode.ChildNodes[
8].InnerText = System.Web.HttpContext.Current.Request.Url.OriginalString; 
            doc.ChildNodes[
1].AppendChild(newXMLNode); 
            doc.Save(@xmlPath); 
            doc.RemoveAll(); 
        } 
    } 

三、 在Web.config加入:

    <appSettings>
        <add key="logfilepath" value="~/errorHandling/errorlog.xml"/>
    appSettings>

四、測試:在你的網站中加入兩段測試代碼

1、在Page_Load:

Page_Load
    public partial class _Default : System.Web.UI.Page
    {
        
protected void Page_Load(object sender, EventArgs e)
        {
            
try
            {
                
throw new Exception("Custom error");
            }
            
catch (Exception ex)
            {
                Response.Write(ex.Message);
                kirin.errorHandler.WriteError(ex, 
"Default.aspx.cs");
            }
        } 
    }

2、在Application_Error中加入:

    void Application_Error(object sender, EventArgs e) 
    { 
        code_center.errorHandler.WriteError(Server.GetLastError().GetBaseException(),
            
"Global.asax"); 
    } 

3、Page_Load異常的結果:

errorXML
  <error>
    <datetime>2010-1-29 9:29:24datetime>
    <filename>Default.aspx.vbfilename>
    <classname>kirin._Defaultclassname>
    <methodname>Page_Loadmethodname>
    <errormethod>Page_Loaderrormethod>
    <messsage>Custom errormesssage>
    <errordetails>   在 kirin._Default.Page_Load(Object sender, EventArgs e) 位置 C:\Demo\kirin_code_center\kirin\Default.aspx.cs:行號 16errordetails>
    <IP>127.0.0.1IP>
    <url>http://localhost:2192/default.aspxurl>
error>

五、完整代碼/Files/zhuqil/kirin_errorHandler.rar

0
0
 
 
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()