December 16, 2010

好用的error logging framework - ELMAH

看到RiCo兄一文介紹elmah這支error logging framework,覺得還蠻不錯的,自己也安裝來玩看看。elmah能將所有exception都log起來,除了可以把整個例外訊息log成XML,或存在資料庫中,也可以將訊息以email寄給管理者。

關於如何安裝elmah,可參考Introductory article by Simone BusoliLogging Error Details with ELMAHELMAH - Error Logging Modules And Handlers三篇文章,以下為試用後的一些心得

1.安裝後要記得將<security allowRemoteAccess="0" />裡的值設成0或false,非必要的話請避免透過遠端電腦瀏覽log,設定好後遠端讀取elmah.axd就會得到以下頁面


2.如果有使用表單驗証功能,記得要將elmah.axd開放給所有使用者(或拒絕匿名),但記得要設定allowRemoteAcess為0,這樣就可以拒絕遠端瀏覽elmah.axd但可以在本機瀏覽

3.使用email寄送log時,記得加入<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />於<httpModules>區段中,以免收不到信,又看不到elmah有信件寄送不出去的error log

4.使用email寄送log用的<errorMail>區段中有一項屬性noYsoad。將它設為false時,則寄送的郵件中會有一html格式的附件檔,內容為exception發生時的黃色畫面內容;設為true則不含此附件




5.elmah可以將log匯出成csv格式,不過測試後發現中文會變成亂碼


6.elmah提供XML格式的log檔,只需加入<errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="..." />區段,並設定logPath;logPath需為一已存在的絕對路徑(如D:\Logs)或相對路徑(如~/Logs/elmah),否則elmah會出現找不到路徑的錯誤訊息

7.elmah提供的範例設定會將elmah.axd放在應用程式根目錄下,但我們不會想要讓人家知道我們把這log位址放在哪,可以參考Securely Implement ELMAH For Plug And Play Error Logging一文及其討論串,變更elmah.axd路徑並做一些安全性設定的動作(如使用角色權限權管理)

8.當程式碼中有以try-catch攔劫例外時,則elmah不會將例外log起來

9.若要在thread中使用elmah請參考http://stackoverflow.com/questions/841451/using-elmah-in-a-console-application


Last updated: 2011/02/18

No comments: