Coding 之路,不由分說 .Net,MVC,jQuery

23二月/120

如何為網站錯誤記錄模組 Elmah 設定篩選器來過濾錯誤資訊

Google PageRank查詢

前言

Elmah 是蠻多 ASP.Net 開發者會使用來記錄網站錯誤的元件,而透過 NuGet 來安裝也很方便,也會替我們在 WEB.Config 加上基本的設定,如果還沒安裝過的網友可以參考 Demo 大的如何偵錯--ELMAH 絕妙的偵錯工具安全架設於ASP.NET MVC, 這篇有詳細的安裝說明和 WEB.Config 需要增加的組態設定,預設會記錄下所有的網站錯誤,但是有時候並非對於我們偵錯的時候都有幫助的紀錄,像是 404 狀態記錄,這一篇就是要介紹如何設定篩選器來過濾我們需要的紀錄就好。

說明

根據官方文件說明,我們可以從程式碼中來設定要篩選的紀錄,也可以在 web.config 設定組態,比較起來還是在 web.config 來設定會有較方便也彈性大一點。本文就介紹關於 web.config 的設定。

首先先確認 <httpModules> 中的設定,確認有下面兩的項目:

再來確認 <configSections> 區段內有以下的設定:

不過如果使用 NuGet 安裝,預設上面的區段應該都會幫你加上去的。但是還是確認一下,才不會發生篩選器怎麼設定都失效的情形。

這些都確認完之後就是開始設定篩選器囉!篩選器的設定是在 <configuration> 內的 <elmah> 區段,如果沒有的話就自己新增一個囉!

首先介紹最常用的過濾:篩選掉 404 錯誤:

篩選器的區段是由 <errorFilter> 所包覆,然後再用 <test> 區段來設定我們的篩選條件,而上面的設定就是 HttpStatusCode 等於(equal) 404 的都會過濾掉。再來仔細看這一段設定:

<equal binding="HttpStatusCode" value="404" type="Int32" />

可以分作四個部分來看:

  • equal
    要比對的邏輯因子,這邊是使用等於(equal),除此還有大於(greater)、小於(lesser)、大於等於(greater-or-equal)、小於等於(lesser-or-equal)...等多種可以設定,更多的邏輯運算可以參考官方文件。
  • binding
    比對的項目。這邊除了 HttpStatusCode,還可以設定 Exception、BaseException、Context 等多種項目。 這些項目只的都是 .Net 裡面的類別,因此我們還要指定它的屬性,比如說最常用的到錯誤訊息,我們就可以用 Exception.Message 或 BaseException.Message 就可以比對裡面的字串了。
  • value
    要比對的值。
  • type
    要比對的形態。這邊型態可以參考 MSDN TypeCode 列舉型別

以上是基本的設定篩選器設定,但是有時候我們可能會需要多重的條件時候該怎麼辦呢?這點 Elmah 也考慮到了,我們可以設定如下面的設定:

上面的設定代表是 HttpStatusCode 大於(greater) 399 而且(and)小於(lesser) 500,這邊除了 <and> 邏輯運算子之外還有 <or> 和 <not> 可以使用。

到這邊應該會有疑問,錯誤訊息都是文字,總不可能都一直設定等於來篩選吧!這疑問就是接下來要介紹的正規表示式的比對方式了:

上面就是設定錯誤狀態碼為 404,錯誤訊息是「找不到路徑 favicon.ico」的情形,其中 pattern 就是正規表示式的寫法,這邊我沒有寫的很完善,主要是說明可以使用 regex 這一個比對的因子加上 pattern 來比對錯誤訊息的字串。

結論

經過上面的說明應該可以符合蠻多篩選的需求了,如果還需要更複雜的設定條件可以參考官方文件,裡面還有提到不少其他的寫法,這邊就不一一介紹了。

參考資料

如何偵錯--ELMAH 絕妙的偵錯工具安全架設於ASP.NET MVC

ASP.NET保安系列 - 關於elmah.axd的安全設定

Filtering - 官方文件

Exception 類別

Exception 屬性

TypeCode 列舉型別

回覆 (0) 引用 (0)

還沒有回覆。


Leave a comment

目前沒有人引用這篇文章。