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异常
首先需要添加如下引用:
None.gif Microsoft.Practices.EnterpriseLibrary.Logging.dll
None.gif
None.gifMicrosoft.Practices.EnterpriseLibrary.Logging.Database.dll
None.gif
None.gifMicrosoft.Practices.EnterpriseLibrary.Data.dll
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 >
4 .创建一个未处理的异常
Default.aspx.csPage_Load事件中制造一个异常信息
public  partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        int error = Int32.Parse("bbbbb");
    }
}
运行程序后,可以看到数据库表中会多出一条记录:
其中Message的内容:
None.gif Input string was not in a correct format.
None.gif
None.gifSOURCE: mscorlib
None.gif
None.gifFORM: 
None.gif
None.gifQUERYSTRING: 
None.gif
None.gifTARGETSITE: Void StringToNumber(System.String, System.Globalization.NumberStyles, NumberBuffer ByRef, System.Globalization.NumberFormatInfo, Boolean)
None.gif
None.gifSTACKTRACE:    at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
None.gif
None.gif   at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
None.gif
None.gif   at System.Int32.Parse(String s)
None.gif
None.gif   at _Default.Page_Load(Object sender, EventArgs e) in c:\Inetpub\wwwroot\EntLibDemo2\Default.aspx.cs:line 15
None.gif
None.gif   at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
None.gif
None.gif   at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
None.gif
None.gif   at System.Web.UI.Control.OnLoad(EventArgs e)
None.gif
None.gif   at System.Web.UI.Control.LoadRecursive()
None.gif
None.gif   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
这样我们就实现了用 Logging Application Block对未处理异常信息的记录,如果要记录到文本文件或者发送 Email,只需要在第 2步新建 Flat File Trace Listener或者 Email Trace Listener,使用文本文件时要注意设置文件夹的权限。















本文转自lihuijun51CTO博客,原文链接: http://blog.51cto.com/terrylee/67627 ,如需转载请自行联系原作者
相关文章
|
.NET 开发框架
IIS&ASP.NET 站点IP跳转到域名
前言:先到微软的 https://www.iis.net/downloads/microsoft/url-rewrite  下载URL Rewrite 目标:输入ip跳转到域名所在的网站 比如58的115.
1670 0
|
NoSQL 应用服务中间件 Redis
Docker-Compose一键部署Ningx+Asp.net core站点+Redis
生产环境更新追求快速平稳,Docker-Compose 通过一个配置文件来管理多个Docker容器,在配置文件中services来定义,然后使用脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器的应用场景,实现环境的快速搭建。
5376 0
|
.NET 中间件 开发框架
ASP.NET Core 异常和错误处理 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 异常和错误处理 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 异常和错误处理 上一章节中,我们学习了 ASP.
1247 0
|
负载均衡 前端开发 测试技术
IIS+Asp.Net Mvc必须知道的事(解决启动/重启/自动回收站点后第一次访问慢问题)
问题现象: Asp.net Mvc站点部署在IIS上后,第一个用户第一次访问站点,都会比较慢,确切的说是访问站点的Action页面(即非静态页面,因为静态页面直接由IIS处理返回给用户即完成请求,而Action页面IIS要转交给Aspnet_Wp工作进程,进而涉及相关初始化操作,这些初始化操作是比较慢的。
3318 0
|
监控 .NET Java
asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程
最近在学习张善友老师的NanoFabric 框架的时了解到Exceptionless : https://exceptionless.com/ !因此学习了一下这个开源框架!下面对Exceptionless的学习做下笔记! Exceptionless是什么?能做什么呢? “Exceptionless”这个词的定义是:没有异常。
1842 0
|
.NET Linux 程序员
从博客园博问站点迁移ASP.NET Core展望.NET Core
今年年初,博客园的博问系统就已经迁移到了 ASP.NET Core on Linux并发布上线发布。 我们看到博客园发表官方博客-- .NET跨平台之旅:博问站点迁移至ASP.NETCore on Linux并发布上线 访问地址:http://www.cnblogs.com/cmt/p/6437901.html   博客园在文章末尾说: 虽然在迁移过程中遇到了很多问题,但是我们的最大体会是:对 .NET Core 的了解越多,你就越喜欢它,这才是真正的魅力。
1190 0
|
前端开发 .NET 开发框架
asp.net mvc HandleErrorAttribute 异常错误处理 无效!
系统未知bug,代码没有深究。  现象:filters.Add(new HandleErrorAttribute()); 使用了全局的异常处理过滤。 HandleErrorAttribute 核心代码: public virtual void OnException(ExceptionC...
1079 0
|
.NET 测试技术
【转】asp.net 利用Global.asax 捕获整个解决方案中的异常错误
之前做项目的时候都是在每个页面中处理这不同的异常信息,一个页面数下来,很多个try{}catch{}语句块,令整个代码结构有些不够美观。             今天看到一篇帖子,是关于利用全局应用程序类来帮忙获取异常信息,利用 server.Transfer('''')指定接受错误的页面;加上在接受错误页面中利用 server.GetLastError() 获取前一个异常源。
828 0
|
.NET Windows 开发框架
ASP.NET 站点出错 NT AUTHORITY\NETWORK SERVICE) does not have write access to Temporary ASP.NET Files
出错信息如下: Server Error in '/' Application. The current identity (NT AUTHORITY\NETWORK SERVICE) does not have write access to 'C:\WINDOWS\Microsoft.
935 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
42 0