【工具推薦】ELMAH——可插拔錯誤日誌工具

  今天看到一篇文章(構建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

image

其中demo.cmd爲批處理文件,用來生成samples裏面Demo的相關文件,如bin,App_Data等等。工具

它會啓動tools目錄中的Cassini.exe,設置好應用程序虛擬目錄以及端口號(從demo.cmd裏面作設置)網站

image 

啓動Cassini後,會自動打開一個網頁,點擊裏面的連接:To see the list of errors logged, vist elmah.axd.ui

image

再查看下生成的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應用程序項目:

image

在「視圖」菜單 –> 「其餘窗口」中,找到以下:

image

選擇「Package Manager Console」:

image 

咱們看下NuGet都有哪些指令,輸入get-help NuGet

image 

這裏輸入「Install-Package elmah」,進行elmah安裝(在你安裝完以後你也能夠經過Update-Package從網站上更新最新版本的包,也能夠經過Uninatall-Package卸載Elmah):

image

OK,安裝成功。這時候你能夠看到項目中引入了Elmah引用:

image

你也能夠經過點擊右鍵:

image

選擇「Add Library Package Refernece」進行卸載Elmah:

image

您還能夠看到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,其實還支持不少相似安裝包的安裝以及卸載。

相關文章
相關標籤/搜索