在「ASP.NET MVC + ELMAH 監控並記錄你的網站錯誤資訊 3」這篇文章中介紹了ELMAH寄發郵件通知,
也說明了如何不去寄發特定Http StatuCode錯誤的信件通知,
但是在Web.Config的elmah Section的errorMail設定中,已經把寄發信件通知的Subject給統一處理了,
這樣一來就無法分辨寄來的錯誤通知的差異性,
因為有些錯誤是必須要能夠設定重要性,而且也需要在信件主旨中可以馬上辨識以快速處理,
所以接下來就是說明一下對於特定的Exception要如何去設定個別的見信重要性與信件主旨。
先看一下Web.Config中的elamh errorMail的設定:
<elmah><errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data/Elmah.Errors" /><security allowRemoteAccess="yes" /><errorMailfrom="寄出的Email"to="收信的Email"subject="通知信件的主旨"async="true"smtpPort="0"useSsl="true"/></elmah>
這邊的設定是將elmah所捕捉到的錯誤寄發通知信件,而信件的主旨、重要性都是統一處理的,
也就是說,不管發生的錯誤是什麼,信件的重要性、主旨都是一樣的,這樣就無法有效分辨錯誤訊息的差異。
所以為了能夠方便區分錯誤通知的差異,所以就要手動做點修改。
於Global.asax中增加ErrorMail_Mailing()方法
如下所示:
void ErrorMail_Mailing(object sender, Elmah.ErrorMailEventArgs e){if (e.Error.Exception is NotImplementedException){e.Mail.Priority = System.Net.Mail.MailPriority.High;e.Mail.Subject = "This is a high priority item! About「NotImplementedException」";
}else if (e.Error.Exception is System.ApplicationException){e.Mail.Priority = System.Net.Mail.MailPriority.High;e.Mail.Subject = "This is a high priority item! About「ApplicationException」";
e.Mail.CC.Add("要另外通知人員的Email");
}}
因為Exception的類別有很多種,我這邊僅拿兩種來做示範,
例如Exception類別為NotImplementException或ApplicationException時,就把錯誤通知信件的重要性設為High,
而信件的主旨也做了修改,而當發生ApplicationException時,還會CC給另一個需要通知的人員,
如此一來就可以在收到的錯誤通知信件裡馬上辨識,以加速處理網站的錯誤。
其實這樣的處理還是會有些不足,因為Exception的類型有太多種了,而且很難掌握程式發生例外到底是那一種,
不太可能去將所有的Exception都去做這樣的個別處理與設定,
這樣的客製化設定只能限定於某些常常發生的Exception上,因為這些常常發生Exception才是應該要多家關注並解決的,
最好的處理方式還是在try - catch的區塊中,去做好Exception的分級處理,
可以在系統中使用Log套件,例如:NLog, Log4Net, Coommon Logging, Enterprise Library Logging Application Block等,
於發生Exception時,將例外做好等級區分,當某些等級的例外發生時再去寄發通知信件,以充分掌握每個Exception的詳細資訊。
參考連結:
dotnetslackers.com - ELMAH - Error Logging Modules And Handlers
Scott On Writing.NET - Customizing ELMAH’s Error Emails
以上
您好,
回覆刪除請問我有多收件者時, 用下列設定會收不到,
我是.NET 3.5, google後是查到用, 分隔, 但是依舊不行.
您好,
回覆刪除OK了, CC裡面可以用,
感謝.