2011/11/10

在 ASP.NET 專案中安裝 ELMAH 擴充套件 STEP BY STEP

在這個全世界有數百萬起跳的人口都在從事軟體開發工作的今天,程式設計絕對不是一個適合單打獨鬥的行業。雖然我個人也是個偏好親手下去寫所有程式的開發人員,但是若想應付改來改去的需求、節省時間、準時交件的話,有時候不借助他人之力是不行的。很幸運的,確實有很多已經寫好、包好、測試好 (而且好用 - 這是重點) 的套件就在網路上,為什麼還需要凡事都自已動手?

問題是,通常這些套件的安裝非常繁複、要面對的情況也很多樣。有時候光是安裝這些套件就會難倒一堆人,甚至讓人興起不如自已寫還比較快的想法。

但是現在有了 NuGet,所有事情都簡化了。套件的搜尋、瀏覽、下載、安裝和設定都可以讓 NuGet 幫你做好,在大部份情況下你甚至什麼都不需要做。

你可以在 MSDN 網站上下載並安裝 NuGet,也可以直接從 Visual Studio 2010 的擴充管理員中 (在「工具」選單裡面) 下載並安裝。

接著,我要示範在一個 ASP.NET 的 Web Form 專案中安裝 ELMAH 套件。為 ASP.NET 開發的 logging 套件還不少,除了最早的 Log4Net,還有 NLog、ELMAH 等等。其中的 ELMAH (Error Logging Modules and Handlers) 套件是一個蠻受好評的 logging 工具,它可以在背景中幫你記錄網站中的例外事件,包括一些連你都不曾知曉的錯誤。 要安裝 ELMAH,有好幾種方法,但是最簡單的方法就是從 Visual Studio 中透過 NuGet 直接安裝。如下圖,在你的專案名稱上按下滑鼠右鍵,並選取「Manage NuGet Packages...」項目:

接著,在跳出來的視窗右上角的搜尋文字框中輸入 ELMAH 並按下 ENTER,就可以在主視窗中看到可供選擇的套件目錄:

我在這裡要把 ELMAH 所使用的資料庫放在 SQL Server 上,所以我選擇 ELMAH on MS SQL Server 這個項目。按下 Install 按鈕就可以開始安裝。

安裝完畢後,該項目 (以及其它幾個必需的附屬項目) 中的 Install 按鈕消失,其右上角則出現一個打勾的符號:

現在,在你的專案下面會看到新增加的 App_Readme 資料夾,以及附屬檔案:

請開啟 Elmah.SqlServer.txt 檔案,它會指示你安裝 SQL 資料庫的方法:

Please note that in order to complete the installation of ELMAH.SqlServer you will have to do the following:
1) Run the Elmah.SqlServer.sql script against your database
2) Edit your web.config with the correct settings in the elmah <connectionString> to connect to your database

說實在話,資料庫的安裝與設定是這整件事情中最麻煩的地方了。但是每個人的環境設定都不一樣,我沒辦法帶著你一步一步進行。在我的環境中,我的資料庫是 SQL Express 2008 R2,雖然安裝過程中曾遭遇一些問題,但是幸好都很容易克服。相信對你而言應該不會太難。

現在,請開啟 Elmah.SqlServer.sql 這個檔案,然後在檔案內容任意地方按下右鍵,並選取「執行 SQL」這個項目:

在這個步驟中,Visual Studio 會要求你連接到資料庫。你必須在這個步驟中連接到你的資料庫,並且確認連線字串的寫法。

如果你無法從 VS2010 中成功執行 Elmah.SqlServer.sql 的話,你可以採用另一種做法,那就是從 SQL Server management Studio 中直接執行它。如下圖,先建立一個空白的資料庫 (例如取名為 ELMAH),在這個資料庫名稱上按滑鼠右鍵並選擇「新增查詢」:

在這個視窗中,把 Elmah.SqlServer.sql 檔案內容拷貝過去,然後在視窗任意處按滑鼠右鍵,再選擇「執行」:

如果成功的話,你應該可以在這個資料庫中找到 dbo.ELMAH_Error 這個資料表。

接著,你必須在 Web.config 檔案中找到 <connectionStrings> 一節中的 elmah-sqlserver 節點中的 connectionString,並且把正確的連接字串填上。如下圖所示:

到這裡,資料庫的設定已經完成。

或許你以為還需要再做什麼設定,其實不需要。

現在我要刻意製造一個網站的錯誤,如下圖所示:

如上,我向網站要求一個不存在的網頁 Default1.aspx,這會造成一個內部的例外,而網站也回應了一個 404 錯誤訊息。

如果我打開網站上的 elmah.axd 的話,你會發現這個錯誤已經被 ELMAH 自動記錄起來了:

以上就是 ELMAH 的基本功能示範。

其實 ELMAH 並不一定要透過 NuGet 來安裝。你也可以參考 ASP.NET 網站上的 Logging Error Details with ELMAH 一文中的介紹,一步一步把 ELMAH 裝好。但是如果和經由 NuGet 來進行安裝的方法比較起來,我不相信有人願意採用那種繁複的手動安裝方式。

當然,ELMAH 並不是只能攔截如上所述的錯誤而已。它是一個功能完整的 logging 系統,你可以自行依據需求要求 ELMAH 為你記錄自訂的錯誤,例如以下程式:

Exception ex = new Exception("This is really nothing.");
ErrorSignal.FromCurrentContext().Raise(ex);

這裡的 ErrorSignal 是在 Elmah 命名空間之下的類別。當你的程式發出上述指令時,你同樣可以在 elmah.axd 網頁中看到對應的 log。

此外, 如果你把網頁建立或發佈到 IIS 7 的話, 你必須在 web.config 中做些小小的修改: 請把 <system.web><httpModules> 這一段改成 <system.webServer><modules>。詳情可以參考 Rico 的網誌文章

ELMAH 還有其它功能,但已不在本文探討的範圍。如果你有興趣的話,可以自行參考 ELMAH WIKI

沒有留言:

張貼留言