一个简单的asp.net异常记录程序
首先,我写了一个日志记录的类,以便能够把捕获的异常以及相关的用户信息以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);
浙公网安备 33010602011771号