• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

Dotnet之旅

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

一个简单的asp.net异常记录程序

在实际开发Asp.Net项目时,程序可能会出现一些异常,那么我们应该怎么去获得尽量多的系统异常,以便后期维护过程能够尽可能重现异常,及时分析、发现和修复Bug。为了处理这个问题,我写了一个小程序来帮助实现我的需求。

首先,我写了一个日志记录的类,以便能够把捕获的异常以及相关的用户信息以XML方式写入指定目录:

using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Xml;

namespace Logs
{
    /// <summary>
    /// Logs 的摘要说明。
    /// </summary>
    public class WebLogs
    {
        private string logPath = string.Empty;

        public WebLogs(string LogPath)
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
            logPath = LogPath;
        }

        public string FloderPath
        {
            get
            {
                return logPath;
            }
            set
            {
                logPath = value;
            }
        }

        public void Add(string LogType,string UserName,string Content,string IP,string Agent,string Url,string UrlReferrer)
        {
            string filename = LogType+"-"+DateTime.Now.ToShortDateString()+".xml";
            string filepath = logPath + filename;
            LogWrite(filepath,UserName,Content,IP,Agent,Url,UrlReferrer);
        }

        private void LogWrite(string filepath,string UserName,string Content,string IP,string Agent,string Url,string UrlReferrer)
        {
            XmlDocument xdoc = new XmlDocument();
            if(!File.Exists(filepath))
            {
                xdoc.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\"?>"+
                             "<WebLogs></WebLogs>");
            }
            else
            {
                xdoc.Load(filepath);
            }

// 创建一个新的日志节点并将它添加到根节点下
            XmlElement parentNode = xdoc.CreateElement("WebLog");
            xdoc.DocumentElement.PrependChild(parentNode);
            // 创建所有用于存储信息的节点
            XmlElement nameNode = xdoc.CreateElement("UserName");
            XmlElement contentNode = xdoc.CreateElement("Content");
            XmlElement timeNode = xdoc.CreateElement("Time");
            XmlElement ipNode = xdoc.CreateElement("IP");
            XmlElement agentNode = xdoc.CreateElement("Agent");
            XmlElement urlNode = xdoc.CreateElement("Url");
            XmlElement referrerNode = xdoc.CreateElement("Referrer");
            // 获取文本信息
            XmlText nameText = xdoc.CreateTextNode(UserName);
            XmlText contentText = xdoc.CreateTextNode(Content);
            XmlText timeText = xdoc.CreateTextNode(DateTime.Now.ToString());
            XmlText ipText = xdoc.CreateTextNode(IP);
            XmlText agentText = xdoc.CreateTextNode(Agent);
            XmlText urlText = xdoc.CreateTextNode(Url);
            XmlText referrerText = xdoc.CreateTextNode(UrlReferrer);
// 将上面创建的各个存储信息的节点添加到guest节点下但并不包含最终的值
            parentNode.AppendChild(nameNode);
            parentNode.AppendChild(contentNode);
            parentNode.AppendChild(timeNode);
            parentNode.AppendChild(ipNode);
            parentNode.AppendChild(agentNode);
            parentNode.AppendChild(urlNode);
            parentNode.AppendChild(referrerNode);
            // 将上面获取的文本信息添加到与之相对应的节点中
            nameNode.AppendChild(nameText);
            contentNode.AppendChild(contentText);
            timeNode.AppendChild(timeText);
            ipNode.AppendChild(ipText);
            agentNode.AppendChild(agentText);
            urlNode.AppendChild(urlText);
            referrerNode.AppendChild(referrerText);

            // 保存存储信息的XML文件
            xdoc.Save(filepath);
            xdoc = null;
        }
    }
}

然后,我在我的Asp.Net站点的Global.asax.cs的Application_Error事件里加入以下代码:

WebLogs Logs = new WebLogs(Server.MapPath("logs/"));
string referrerUri = (Request.UrlReferrer != null) ?Request.UrlReferrer.AbsoluteUri : string.Empty;
string UserName = (User.Identity.Name != string.Empty) ? User.Identity.Name : "Anonymous";
Logs.Add("Error",UserName,Server.GetLastError().ToString(),Request.UserHostAddress,Request.UserAgent,Request.Url.AbsoluteUri,referrerUri);

posted on 2007-01-02 10:53  浮游  阅读(124)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3