一个简单的asp.net异常记录程序
在实际开发Asp.Net项目时,程序可能会出现一些异常,那么我们应该怎么去获得尽量多的系统异常,以便后期维护过程能够尽可能重现异常,及时分析、发现和修复Bug。为了处理这个问题,我写了一个小程序来帮助实现我的需求。
首先,我写了一个日志记录的类,以便能够把捕获的异常以及相关的用户信息以XML方式写入指定目录:
1
using System;
2
using System.Data;
3
using System.Data.SqlClient;
4
using System.IO;
5
using System.Xml;
6
7
namespace Logs
8
{
9
/// <summary>
10
/// Logs 的摘要说明。
11
/// </summary>
12
public class WebLogs
13
{
14
private string logPath = string.Empty;
15
16
public WebLogs(string LogPath)
17
{
18
//
19
// TODO: 在此处添加构造函数逻辑
20
//
21
logPath = LogPath;
22
}
23
24
public string FloderPath
25
{
26
get
27
{
28
return logPath;
29
}
30
set
31
{
32
logPath = value;
33
}
34
}
35
36
public void Add(string LogType,string UserName,string Content,string IP,string Agent,string Url,string UrlReferrer)
37
{
38
string filename = LogType+"-"+DateTime.Now.ToShortDateString()+".xml";
39
string filepath = logPath + filename;
40
LogWrite(filepath,UserName,Content,IP,Agent,Url,UrlReferrer);
41
}
42
43
private void LogWrite(string filepath,string UserName,string Content,string IP,string Agent,string Url,string UrlReferrer)
44
{
45
XmlDocument xdoc = new XmlDocument();
46
if(!File.Exists(filepath))
47
{
48
xdoc.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\"?>"+
49
"<WebLogs></WebLogs>");
50
}
51
else
52
{
53
xdoc.Load(filepath);
54
}
55
56
// 创建一个新的日志节点并将它添加到根节点下
57
XmlElement parentNode = xdoc.CreateElement("WebLog");
58
xdoc.DocumentElement.PrependChild(parentNode);
59
// 创建所有用于存储信息的节点
60
XmlElement nameNode = xdoc.CreateElement("UserName");
61
XmlElement contentNode = xdoc.CreateElement("Content");
62
XmlElement timeNode = xdoc.CreateElement("Time");
63
XmlElement ipNode = xdoc.CreateElement("IP");
64
XmlElement agentNode = xdoc.CreateElement("Agent");
65
XmlElement urlNode = xdoc.CreateElement("Url");
66
XmlElement referrerNode = xdoc.CreateElement("Referrer");
67
// 获取文本信息
68
XmlText nameText = xdoc.CreateTextNode(UserName);
69
XmlText contentText = xdoc.CreateTextNode(Content);
70
XmlText timeText = xdoc.CreateTextNode(DateTime.Now.ToString());
71
XmlText ipText = xdoc.CreateTextNode(IP);
72
XmlText agentText = xdoc.CreateTextNode(Agent);
73
XmlText urlText = xdoc.CreateTextNode(Url);
74
XmlText referrerText = xdoc.CreateTextNode(UrlReferrer);
75
// 将上面创建的各个存储信息的节点添加到guest节点下但并不包含最终的值
76
parentNode.AppendChild(nameNode);
77
parentNode.AppendChild(contentNode);
78
parentNode.AppendChild(timeNode);
79
parentNode.AppendChild(ipNode);
80
parentNode.AppendChild(agentNode);
81
parentNode.AppendChild(urlNode);
82
parentNode.AppendChild(referrerNode);
83
// 将上面获取的文本信息添加到与之相对应的节点中
84
nameNode.AppendChild(nameText);
85
contentNode.AppendChild(contentText);
86
timeNode.AppendChild(timeText);
87
ipNode.AppendChild(ipText);
88
agentNode.AppendChild(agentText);
89
urlNode.AppendChild(urlText);
90
referrerNode.AppendChild(referrerText);
91
92
// 保存存储信息的XML文件
93
xdoc.Save(filepath);
94
xdoc = null;
95
}
96
}
97
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
然后,我在我的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);
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号