Enterprise Library 2.0 技巧(3):记录ASP.NET站点中未处理的异常
这篇文章不能算是Enterprise Library 2.0的一个技巧,只是Logging Application Block的一个简单应用而已,在这里我们使用Logging Application Block来记录一个ASP.NET 2.0站点中未处理的异常到数据库中,当然你也可以记录到文本文件中,或者发送到指定的Email中,下面看一下具体的实现步骤。
1.创建数据库表和存储过程
在安装目录的src\Logging\TraceListeners\Database\Scripts文件夹下,执行CreateLoggingDb.cmd,注意在这之前要先把LoggingDatabase.sql另存为Unicode格式(参见技巧2)。安装完成后将会创建一个Logging的数据库,其中会有三张数据表和四个相关的存储过程。
2.新建Web站点并进行配置
新建一个Web站点后,添加Web.config文件,并用EntLibConfig.exe打开,新建Logging Application Block后,再新建Database Trace Listener:
设置Database Trace Listener的各项参数,包括存储过程名,同时还依赖于DAAB:
3.捕获并记录ASP.NET异常
首先需要添加如下引用:





为Web站点添加Global.asax文件,并且在Application_Error编写如下代码,这样在有异常发生时应用程序块会把异常信息记录到数据库中:
<%@ Application Language="C#" %>
<%@ Import Namespace="Microsoft.Practices.EnterpriseLibrary.Logging" %>
<script runat="server">
void Application_Error(object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs
Exception ex = Server.GetLastError().GetBaseException();
LogEntry log = new LogEntry();
log.Message = ex.Message +
"\r\nSOURCE: " + ex.Source +
"\r\nFORM: " + Request.Form.ToString() +
"\r\nQUERYSTRING: " + Request.QueryString.ToString() +
"\r\nTARGETSITE: " + ex.TargetSite +
"\r\nSTACKTRACE: " + ex.StackTrace;
Logger.Write(log);
}
</script>
在Default.aspx.cs的Page_Load事件中制造一个异常信息
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
int error = Int32.Parse("bbbbb");
}
}
运行程序后,可以看到数据库表中会多出一条记录:
其中Message的内容:



























这样我们就实现了用Logging Application Block对未处理异常信息的记录,如果要记录到文本文件或者发送Email,只需要在第2步新建Flat File Trace Listener或者Email Trace Listener,使用文本文件时要注意设置文件夹的权限。
参考http://davidhayden.com/blog/dave/archive/2006/02/15/2802.aspx
Worktile,新一代简单好用、体验极致的团队协同、项目管理工具,让你和你的团队随时随地一起工作。完全免费,现在就去了解一下吧。
https://worktile.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)