這就是我所做的,並且由於電子郵件問題,我仍然有一個錯誤。
我從來沒有在數據庫上保留任何東西,因爲如果數據庫有錯誤我不會在數據庫原因上出現這種錯誤,從邏輯上講,插入將失敗!
因此,我通過電子郵件發送給像[email protected]
主題一個特殊的電子郵件地址:[應用程序名稱] [時間戳:DDMMYYYY HHMMSS] 消息:應用程序,錯誤消息,堆棧跟蹤信息加上會話變量,如用戶名和服務器變量,如推薦人。
ASP.NET開發人員的最好的朋友是的堆棧跟蹤信息,正是在這裏,你會知道哪裏出了問題,什麼是呼叫,它被調用。
您在本系統有唯一的問題,是你不會得到任何東西,如果電子郵件有問題(一些例外,在發送電子郵件時),爲此,我開始添加到每月的XML文件[ errorLog_mmm_yyyy.xml],並使用gridview加載了一個簡單的「拖放」頁面,該頁面加載了我想要檢查錯誤的月份和年份的XML。
try
{
// production code
}
catch(Exception ex)
{
Utilities.Mail.SendError(ex);
}
或最好的辦法:將它添加到的Application_Error在Global.asax中:與代碼
<%@ Application Language="C#" %>
<%@ Import Namespace="System.Diagnostics" %>
<script language="C#" runat="server">
void Application_Error(object sender, EventArgs e)
{
//get reference to the source of the exception chain
Exception ex = Server.GetLastError().GetBaseException();
//log the details of the exception and page state to the
//Windows Event Log
EventLog.WriteEntry("myWebApplication name",
"MESSAGE: " + ex.Message +
"\nSOURCE: " + ex.Source +
"\nFORM: " + Request.Form.ToString() +
"\nQUERYSTRING: " + Request.QueryString.ToString() +
"\nTARGETSITE: " + ex.TargetSite +
"\nSTACKTRACE: " + ex.StackTrace,
EventLogEntryType.Error);
Utilities.Mail.SendError(ex);
}
</script>
上面添加錯誤到事件日誌,我追加了錯誤的SendError(Exception)函數中的XML文件。
保存所有數據庫的問題是,如果錯誤是在數據庫本身,您永遠不會在日常報告中得到錯誤,導致系統無法插入它! :-) – balexandre 2008-10-25 19:27:02