今天看到一篇文章(構建ASP.NET網站十大必備工具(2)),裏面介紹了一個ELMAH的錯誤日誌工具,因而研究了一下。 ELMAH 是 Error Logging Modules and Handlers for ASP.NET 的縮寫。ELMAH可讓你記錄下你的網站發生的任何一個錯誤,在未來,你能夠從新檢查這些錯誤。你能夠從ELMAH項目的官方網站免費下載ELMAH:http://code.google.com/p/elmah/。html
ELMAH既支持ASP.NET Web Forms 又支持 ASP.NET MVC。你能夠對ELMAH進行配置來存儲各類不一樣的錯誤(XML文件,事件日誌,Access數據庫,SQL數據庫,Oracle數據庫,或者計算機 RAM。)你還可讓ELMAH在錯誤發生的時候,把錯誤信息email給你。web
在默認狀況下,在一個已經安裝ELMAH的網站中,你能夠經過請求的elmah.axd頁面的方式來訪問ELMAH。數據庫
下載下來後,看下它的目錄:asp.net
其中demo.cmd爲批處理文件,用來生成samples裏面Demo的相關文件,如bin,App_Data等等。工具
它會啓動tools目錄中的Cassini.exe,設置好應用程序虛擬目錄以及端口號(從demo.cmd裏面作設置)網站
啓動Cassini後,會自動打開一個網頁,點擊裏面的連接:To see the list of errors logged, vist elmah.axd.ui
再查看下生成的Web.config:google
<?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="noreply@example.com" to="elmah@example.com" 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處理。spa
存儲數據使用的是Sqlite的。.net
經過這種方式,您就能夠在本身的網站上部署這樣的一個錯誤日誌工具了。
若是您想自動建立一個這樣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,其實還支持不少相似安裝包的安裝以及卸載。