errorHandler

本文介绍了一个ASP.NET应用程序中的错误处理机制与日志记录实现方式。通过自定义错误处理器类,该应用能够捕获并记录详细的错误信息到XML文件中,包括错误发生的时间、文件名、类名、方法名、目标站点、错误消息、堆栈跟踪及用户的IP地址等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace kirin
{
    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");
            }
        }
    }
}

 

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Reflection;
using System.Diagnostics;

namespace kirin
{
    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();
        }
    }

}

 

 

 

 

 

 

<?xml version="1.0" encoding="utf-8"?>
<errorlog>
  <error>
    <datetime>datetime</datetime>
    <filename>filename</filename>
    <classname>classname</classname>
    <methodname>methodname</methodname>
    <errormethod>errormethod</errormethod>
    <messsage>ErrorMessage</messsage>
    <errordetails>Details goes here</errordetails>
    <IP>IP adress</IP>
    <url>URL</url>
  </error>
  <error>
    <datetime>2010-1-29 9:29:24</datetime>
    <filename>Default.aspx.vb</filename>
    <classname>kirin._Default</classname>
    <methodname>Page_Load</methodname>
    <errormethod>Page_Load</errormethod>
    <messsage>Custom error</messsage>
    <errordetails>   在 kirin._Default.Page_Load(Object sender, EventArgs e) 位置 C:/Demo/kirin_code_center/kirin/Default.aspx.cs:行号 16</errordetails>
    <IP>127.0.0.1</IP>
    <url>http://localhost:2192/default.aspx</url>
  </error>
  <error>
    <datetime>2010-1-29 9:29:24</datetime>
    <filename>Global.asax</filename>
    <classname>kirin.Global</classname>
    <methodname>Application_Error</methodname>
    <errormethod>GetFileInfo</errormethod>
    <messsage>文件不存在。</messsage>
    <errordetails>   在 System.Web.StaticFileHandler.GetFileInfo(String virtualPathWithPathInfo, String physicalPath, HttpResponse response)
   在 System.Web.StaticFileHandler.ProcessRequestInternal(HttpContext context)
   在 System.Web.DefaultHttpHandler.BeginProcessRequest(HttpContext context, AsyncCallback callback, Object state)
   在 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   在 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&amp; completedSynchronously)</errordetails>
    <IP>127.0.0.1</IP>
    <url>http://localhost:2192/favicon.ico</url>
  </error>
</errorlog>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值