标签:
ELMAH 是 Error Logging Modules and Handlers for ASP.NET 的缩写。ELMAH可以让你记录下你的网站发生的任何一个错误,在将来,你可以重新检查这些错误。你可以从ELMAH项目的官方网站免费下载ELMAH:http://code.google.com/p/elmah/。
ELMAH既支持ASP.NET Web Forms 又支持 ASP.NET MVC。你可以对ELMAH进行配置来存储各种不同的错误(XML文件,事件日志,Access数据库,SQL数据库,Oracle数据库,或者计算机 RAM。)你还可以让ELMAH在错误发生的时候,把错误信息email给你。
在默认情况下,在一个已经安装ELMAH的网站中,你可以通过请求的elmah.axd页面的方式来访问ELMAH。
下载下来后,看下它的目录:
其中demo.cmd为批处理文件,用来生成samples里面Demo的相关文件,如bin,App_Data等等。
它会启动tools目录中的Cassini.exe,设置好应用程序虚拟目录以及端口号(从demo.cmd里面做设置)
启动Cassini后,会自动打开一个网页,点击里面的链接:To see the list of errors logged, vist elmah.axd.
再查看下生成的Web.config:
其中elmah.axd对应ErrorLogPageFactory去做Handler处理。
存储数据使用的是Sqlite的。
通过这种方式,您就可以在自己的网站上部署这样的一个错误日志工具了。
如果您想自动创建一个这样Elmah的项目,可以利用ASP.NET软件包管理器 NuGet(http://nuget.codeplex.com/)来安装ELMAH。当然在安装NuGet之前,首先需要在你的VS2010上安装Windows PowerShell 2.0,具体请看http://support.microsoft.com/kb/968929
接着新建一个项目,我这里选择新建一个asp.net Web应用程序项目:
在“视图”菜单 –> “其他窗口”中,找到如下:
选择“Package Manager Console”:
我们看下NuGet都有哪些指令,输入get-help NuGet
这里输入“Install-Package elmah”,进行elmah安装(在你安装完之后你也可以通过Update-Package从网站上更新最新版本的包,也可以通过Uninatall-Package卸载Elmah):
OK,安装成功。这时候你可以看到项目中引入了Elmah引用:
你也可以通过点击右键:
选择“Add Library Package Refernece”进行卸载Elmah:
您还可以看到Web.config中也自动增加了一些Elmah的相关配置:
NuGet还是非常不错的东西,除了支持Elmah,其实还支持很多类似安装包的安装以及卸载。
如果你只是引用Elmah而没有配置采用什么存储形式.Elmah默认设置为内存存储的方式.虽然这种方式便于开发调试.但在部署生产环境后还是推荐对数据要进行持久化存储. Xml文件或是采用支持的数据库.
改成文件存储方式只需要在配置项添加如下代码即可:
1: <elmah>
2: <!--
3: See http://code.google.com/p/elmah/wiki/SecuringErrorLogPages for
4: more information on remote access and securing ELMAH.
5: -->
6: <security allowRemoteAccess="false" />
7: <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/Static/Log/" />
8: </elmah>
该配置必需确认LogPath路径目录是完整存在的.测试会发现在本地文件中会出现一个XML文件:
这种方式虽然简单直观.但Elmah设计方式在每次运行如果应用程序出错一旦扑捉到.就独立生成一个独立的文件.这种方式会导致服务器端存在大量冗余文件.且对这些文件管理也是一个问题.
在数据可视化和管理上数据库依然是最理想的选择.这里采用SQlServer2008 版本测试.在构建Elmah支持SQLServer数据支持需要如下三个操作:
A: 需要告诉Elmah 需要连接什么类型的数据库
B: Elmah如何连接这些数据库.也就是连接字符串需要提供
C: 在指定数据库中已经存在对应存储Log日志表和视图存储过程.
实际操作首先需要Elmah节点添加如下内容:
1: <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="SQlServerConStr" />
在该数据执行如下SQL语句.请参考官方的连接.
Elmah SQL Server Script File:http://code.google.com/p/elmah/source/browse/src/Elmah/SQLServer.sql
执行sQL语句完成后会在当前数据库看到表:
当再次运行应用程序.在Throw ArgumentNullException时查询数据库:
可见简单实用.另外针对SQL语句执行全部以官方标准为主.不同数据库之间SQL Script脚本会存在一定的差异.
在使用Elmah过程发一下一些特点.这里需要说明一下.
Elmah是通过Http Modules 和Http Handler来记录和展示程序捕获的异常. 但是如果你在应用程序中添加异常处理模块.Try-Catch Elmah是无法记录到的.或是在Catch后在Throw出来. 在整个应用程序异常链上. 只有最终的异常抛给了Asp.net运行时Elmah组件才能捕获到并记录.
有很多人认为加入Elmah组件后能够处理应用异常.其实本质上Elmah本质上是一个日志记录工具.并没有处理异常的能力.所以如果异常发生.不会改变原来应用程序给用户体验.依然还会出现黄色页面.
在官方Note明确提到一个例外.:
ELMAH捕获异常是基于HttpApplication对象的Error事件。
如果软件项目中的一些处理导致了HttpApplication事件无法被触发(比如在发生异常后,还没来得及执行Application_Error,就执行了Server.ClearError()方法,
会阻止Error事件的触发,再比如,如果一个异常被try-catch捕获到,并且没有再次throw,那么异常也是不会最终触发Error事件)
日志记录工具还是不少的,比如著名的Log4net以及Enterprise Library中的Logging Application Block。可以说,这些工具相对ELMAH来说,太重量级了,他们可以记录各种日志信息,比如监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码运行时轨迹,作为日后审计的依据;担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。因此,如果仅仅是记录ASP.NET的错误日志.而Elmah开源且足够Clean.首选.
希望文章能够对大家有所帮助:)
标签:
原文地址:http://www.cnblogs.com/eyren/p/4777768.html