通常專案上線後還是必須要監控網站的健康情況,但上線後的設定都會改成<customErrors mode="RemoteOnly" />總不可能有錯還回到正式機去改成Off以後再來偵錯吧,而且有些是客戶才會遇到的錯誤,在資訊不明確的狀態下也是很難除錯的,而這套Elmah就是一套相當好的工具,它可以把網站開始發生的例外全部都記錄下來而且支援多種通知方式,記錄的內容也相當豐富,對於維護網站品質有一定的幫助,如果你有案子在手上需要維護,這套工具是可以幫助到你的。
本文是以ASP.NET MVC 的環境下去安裝的,不過大多數都相同,如果不合胃口向您說聲抱歉。
首先至官網下載需要的元件後(請注意 32bit 和 64bit 的區別)加入至網站參考
加入參考後需要開啟 Web.config 加上些許的設定(請注意你自己是IIS6還是IIS7)
<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" /> <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" /> <section name="errorTweet" requirePermission="false" type="Elmah.ErrorTweetSectionHandler, Elmah" /> </sectionGroup>
<httpHandlers>區段
<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
<httpModules>區段
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
到這裡我們已經完成了使用 Elmah 接收例外的相關設定,如果你覺得我寫的和屎一樣,也可以直接參考官方文件(Using ELMAH with ASP.NET MVC),因為我們已經利用Elmah收例外了因此可以大方的直接把錯誤訊息導向到預設錯誤畫面,或是直接維持RemoteOnly,但是我們目前還是無法看到錯誤,我們還需要設定存放的方式。
需要先在Web.config 的<configuration>區段內自行加上 <elmah> 標籤,而最常見的就是以下兩種。
存放於文字檔
<elmah> <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="D:/Elmah_Log" /> </elmah>
存放於SQL
<elmah> <security allowRemoteAccess="1" /> <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="ConnectionString" /> </elmah>
選擇存放於SQL必須要先建立Elmah相關的資料表可使用官方提供的Script建構(如果你是使用SQL2005以上建議把 [AllXml] 欄位改成 nvarchar(MAX))
現在就真的都可以用了,直接連至http://localhost/elmah.axd 就可以發現,看似正常運作的網站其實還是會有一些例外的,這時候你可能會覺得,不對阿我網站是公開的,大家都可以看到那還得了,況且這錯誤如此的詳細因此我們還是必須要做一些安全措施,好在 .NET 原本就有內建了而之前demo也有寫過類似文章【透過IHttpHandler讓檔案必須登入才可下載】但是不需要設定成這樣...我們只需要加上一小段就可以囉。
在Web.config 的 <system.web> 上面加上
<location path="elmah.axd"> <system.web> <authorization> <deny users="?" /> </authorization> </system.web> </location>
拒絕所有匿名使用者,如果你的網站不是單純的登入就是管理者的話還需要進一步的調整。
請注意以上這種權限設定方法有缺陷,詳細解決方式請參考黑暗大的文章ASP.NET保安系列 - 關於elmah.axd的安全設定
到這裡就真的OK了,但這只是 可以用 Elmah 的最基本設定而已 Elmah 的設定相當多樣,存放路徑也不只本文介紹的兩種甚至可以直接存於RAM中,對於租用虛擬主機碰不到實體檔案的朋友有一定的幫助,有心研究者建議參考官方文章http://code.google.com/p/elmah/wiki/DotNetSlackersArticle會有很大的幫助的。
回應討論