ASP.NET 实现自动捕获异常和异常处理
2012-12-18 20:34
483 查看
这个通用自动捕获异常和异常处理具体思路其实很简单,ASP.NET在应用程序级别处理异常的代码都是放在Global.asax的Application_Error事件处理下的:
[csharp]
view plaincopyprint?
protected void Application_Error(object sender, EventArgs e)
{
// 在出现未处理的错误时运行的代码
Exception objErr = Server.GetLastError().GetBaseException();
string configPath = Server.MapPath("~/Exception.config");
string log = ErroUtil.Write2Log(objErr);
ErroUtil.PostEmail(log);
Server.ClearError();
Response.Redirect( new XmlParse(configPath).getVal
4000
ue("redirectPath"));
}
我们可以在上面的事件处理的方法中捕获所有的异常,而且还可以把异常记录到日志文件,并且同时发送Email告诉开发人员出现了什么问题,如下:
发邮件:
[csharp]
view plaincopyprint?
/// <summary>
/// 把抛出异常的信息以邮件的形式
/// 发送给开发人员便于维护
/// </summary>
/// <param name="log">抛出异常的信息</param>
public static void PostEmail(string log)
{//发邮件
//获得配置信息,邮箱服务器名称,发送和接受邮箱地址,密码
string stmpServer = parse.getValue("stmpServer");
string email = parse.getValue("email");
string password = parse.getValue("password");
System.Net.Mail.SmtpClient client = new SmtpClient(stmpServer);
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential(email, password);
client.DeliveryMethod = SmtpDeliveryMethod.Network;
System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();
mail.From = new MailAddress(email);
mail.To.Add(email);
mail.Subject = System.DateTime.Now.ToString() + "";
mail.BodyEncoding = System.Text.Encoding.Default;
mail.Body = log;
//client.Send(mail);
}
存日志:
[csharp]
view plaincopyprint?
/// <summary>
/// 根据所抛出的异常,组成异常信息字符串
/// 并且把异常信息存储到日志里面
/// </summary>
/// <param name="objErr"></param>
/// <returns></returns>
public static string Write2Log(Exception objErr)
{
string errortime = string.Empty;
string erroraddr = string.Empty;
string errorinfo = string.Empty;
string log = string.Empty;
errortime = "发生时间:" + System.DateTime.Now.ToString();
//erroraddr = "发生异常页: " + Request.Url.ToString();
errorinfo = "异常信息: " + objErr.Message;
System.IO.StreamWriter writer = null;
//获取配置信息,日志存储地址,本项目名称
string logFile = parse.getValue("logFile");
string projectName = parse.getValue("projectName");
try
{
// 写入日志
string year = DateTime.Now.Year.ToString();
string month = DateTime.Now.Month.ToString();
string path = logFile;
writer = new System.IO.StreamWriter(path, true);
//string ip = "用户IP:" + Request.UserHostAddress;erroraddr + "<br/>" + ip +
log = errortime+" " + projectName+" " + objErr.ToString() + errorinfo + "<br>" + " ";
writer.WriteLine(log);
}
finally
{
if (writer != null)
writer.Close();
}
return log;
}
为了做成通用的,我们把一些配置信息,保存到xml里面,然后通过解析xml来获取数据,解析xml获取数据:
[csharp]
view plaincopyprint?
public class XmlParse
{
private string filename; //文件路径
public string nodeName = null;//获取的值的节点名称
//构造函数,filename是xml文件的路径
public XmlParse(string filename)
{
this.filename = filename;
}
public string getValue(string nodeName)
{
//XmlTextReader reader = new XmlTextReader(filename);
XmlDocument doc = new XmlDocument();
doc.Load(filename);
XmlNodeList list = doc.DocumentElement.ChildNodes;
foreach (XmlNode item in list)
{
if (item.Name == nodeName) {
string s = item.InnerText;
return item.InnerText;
}
}
return null;
}
}
由于配置文件中有邮箱和密码信息,xml代码就不贴了,这个xml也很简单,总共也就十行左右。到此为止,整个通用自动捕获异常和异常处理机制就完成了,由于本人刚刚接触ASP.NET,所以难免有些错误,请大牛拍砖
相关文章推荐
- 建设局项目总结(三)——ASP.NET 实现自动捕获异常和异常处理
- 建设局项目总结(三)——ASP.NET 实现自动捕获异常和异常处理
- 建设局项目总结(三)——ASP.NET 实现自动捕获异常和异常处理
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
- ASP.NET Forums2.x自动捕获异常的基类
- ASP.NET Forums2.x自动捕获异常的基类(补充)
- ASP.NET Forums2.x自动捕获异常的基类
- Asp.net实现网站提示信息页面后的定时自动跳转到指定页面
- asp.net利用cookie保存用户密码实现自动登录的方法
- [收藏].NET 1.1中预编译ASP.NET页面实现原理浅析 [1] 自动预编译机制浅析
- asp.net web api 异常捕获
- Asp.net 2.0 自定义控件开发[实现自动计算功能(AutoComputeControl)][示例代码下载续][重点推荐控件]
- ASP.NET中实现中文简/繁体自动转换的类
- ASP.NET WebForm Form表单如何实现MVC那种“自动装配”效果呢?
- jQuery在asp.net中实现图片自动滚动
- asp.net 实现自动发送email
- ASP.NET中实现中文简/繁体自动转换的类
- 在asp.net在服务端向客户端添加脚本实现自动弹出消息
- 使用ASP.NET Atlas AutoComplete Behavior或AutoComplete Extender实现自动完成功能(上)
- Asp.net 2.0 自定义控件开发[实现自动计算功能(AutoComputeControl)][示例代码下载][续]