今天看到一篇文章(构建ASP.NET网站十大必备工具(2)),里面介绍了一个ELMAH的错误日志工具,于是研究了一下。 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:
<?
xml version="1.0"
?>
<
configuration
>
<
configSections
>
<
sectionGroup
name
="elmah"
>
<
section
name
="security"
requirePermission
="false"
type
="Elmah.SecuritySectionHandler, Elmah"
/>
<
section
name
="errorLog"
requirePermission
="false"
type
="Elmah.ErrorLogSectionHandler, Elmah"
/>
<
section
name
="errorMail"
requirePermission
="false"
type
="Elmah.ErrorMailSectionHandler, Elmah"
/>
</
sectionGroup
>
</
configSections
>
<
elmah
>
<
errorLog
type
="Elmah.SQLiteErrorLog, Elmah"
connectionStringName
="ELMAH.SQLite"
/>
<
errorMail
from
="[email protected]"
to
="[email protected]"
priority
="high"
/>
</
elmah
>
<
connectionStrings
>
<
add
name
="ELMAH.SQLite"
connectionString
="Data Source=|DataDirectory|errors.s3db"
/>
</
connectionStrings
>
<
system.net
>
<
mailSettings
>
<
smtp
deliveryMethod
="SpecifiedPickupDirectory"
>
<
specifiedPickupDirectory
pickupDirectoryLocation
="F:\ELMAH-1.1-bin\samples\Demo\Mails"
/>
</
smtp
>
</
mailSettings
>
</
system.net
>
<
system.web
>
<
compilation
debug
="true"
defaultLanguage
="C#"
/>
<
httpModules
>
<
add
name
="ErrorMail"
type
="Elmah.ErrorMailModule, Elmah"
/>
<
add
name
="ErrorLog"
type
="Elmah.ErrorLogModule, Elmah"
/>
<
add
name
="ErrorFilter"
type
="Elmah.ErrorFilterModule, Elmah"
/>
</
httpModules
>
<
httpHandlers
>
<
add
verb
="POST,GET,HEAD"
path
="elmah.axd"
type
="Elmah.ErrorLogPageFactory, Elmah"
/>
</
httpHandlers
>
<
trace
enabled
="true"
requestLimit
="10"
pageOutput
="false"
traceMode
="SortByTime"
localOnly
="true"
/>
<
globalization
requestEncoding
="utf-8"
responseEncoding
="utf-8"
culture
="en-US"
/>
<
trust
level
="Full"
/>
</
system.web
>
</
configuration
>
其中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的相关配置:
<
sectionGroup
name
="elmah"
>
<
section
name
="security"
requirePermission
="false"
type
="Elmah.SecuritySectionHandler, Elmah"
/>
<
section
name
="errorLog"
requirePermission
="false"
type
="Elmah.ErrorLogSectionHandler, Elmah"
/>
<
section
name
="errorMail"
requirePermission
="false"
type
="Elmah.ErrorMailSectionHandler, Elmah"
/>
<
section
name
="errorFilter"
requirePermission
="false"
type
="Elmah.ErrorFilterSectionHandler, Elmah"
/>
</
sectionGroup
>
……
<
httpHandlers
>
<
remove
verb
="*"
path
="*.asmx"
/>
<
add
verb
="*"
path
="*.asmx"
validate
="false"
type
="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
/>
<
add
verb
="*"
path
="*_AppService.axd"
validate
="false"
type
="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
/>
<
add
verb
="GET,HEAD"
path
="ScriptResource.axd"
type
="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
validate
="false"
/>
<
add
verb
="POST,GET,HEAD"
path
="elmah.axd"
type
="Elmah.ErrorLogPageFactory, Elmah"
/>
</
httpHandlers
>
<
httpModules
>
<
add
name
="ScriptModule"
type
="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
/>
<
add
name
="ErrorLog"
type
="Elmah.ErrorLogModule, Elmah"
/>
</
httpModules
>
<
httpHandlers
>
<
add
verb
="POST,GET,HEAD"
path
="elmah.axd"
type
="Elmah.ErrorLogPageFactory, Elmah"
/>
</
httpHandlers
>
NuGet还是非常不错的东西,除了支持Elmah,其实还支持很多类似安装包的安装以及卸载。
希望文章能够对大家有所帮助:)