使用ASP.NET 2.0进行记录错误
步驟一:首先創建一個錯誤文件夾用于存放錯誤日志文件。鼠標右鍵站點 > 創建新文件夾。將該文件夾命名為"Error". 如果站點中沒有 Web.config 文件時,請添加一個。 右鍵站點 > 添加新項目 > Web.config.
步驟二:現在我們要創建一個錯誤處理的代碼。我們只需要右鍵站點 > 添加新項目 > 選擇類。 重命名該類為"ErrHandler.cs" ,然后單擊 "添加" 按鈕。當你這么操作的時候,會彈出一個對話框,是否要將這個類文件保存在"App_Code"里面,我們選擇接受。
步驟三:現在我們為ErrHandler.class添加一些功能。該類用于接受錯誤信息并將錯誤信息保存在一個文本文件中。每天創建一個這樣的文本文件。如果已經存在相同的文件名時,錯誤信息將會追加到這個文件中。否則,就創建一個新文件,并將錯誤信息寫入該文件。
?
代碼看來如下: /// Handles error by accepting the error message
/// Displays the page on which the error occured
public static void WriteError(string errorMessage)
{
try
{
string path = "~/Error/" + DateTime.Today.ToString("dd-mm-yy") + ".txt";
if (!File.Exists(System.Web.HttpContext.Current.Server.MapPath(path)))
{
File.Create(System.Web.HttpContext.Current.Server.MapPath(path)).Close();
}
using (StreamWriter w = File.AppendText(System.Web.HttpContext.Current.Server.MapPath(path)))
{
w.WriteLine(" Log Entry : ");
w.WriteLine("{0}", DateTime.Now.ToString(CultureInfo.InvariantCulture));
string err = "Error in: " + System.Web.HttpContext.Current.Request.Url.ToString() +
". Error Message:" + errorMessage;
w.WriteLine(err);
w.WriteLine("__________________________");
w.Flush();
w.Close();
}
}
catch (Exception ex)
{
WriteError(ex.Message);
}
}
?
這就是我們的ErrHandler類了。然后我們來看看如何使用這個類和在Page級中(Application級中)處理錯誤。
在Page級中處理錯誤
在Default.aspx中,從工具箱中添加一個button控件。將這個button命名為 btnError 并設置值為 "Throw Handled Exception".我們將拋出一個異常。只要我們定義了 catch 塊,當錯誤發生時,就會被捕捉到并登記在Error文件夾中。文本文件將以當天的日期作為文件名,不存在文件時,一個新的文件將會被以下代碼所創建。
?
按鈕點擊操作代碼如下: protected void btnHandled_Click(object sender, EventArgs e)
{
try
{
throw new Exception("Sample Exception");
}
catch (Exception ex)
{
// Log the error to a text file in the Error folder
ErrHandler.WriteError(ex.Message);
}
}
?
現在,運行程序,并點擊按鈕。因為我們已經在代碼中處理了錯誤和記錄下了異常,你會發現當點擊按鈕時,似乎什么也沒發生。關閉程序,刷新Error文件夾,你會看到有個以今天日期為文件名的新文件被創建。異常已經被成功記錄下如下所示。其中日期和時間在您的機器上會有所不同。 Log Entry :01/11/2008 23:33:46
Error in:http://localhost:51087/ErrorHandling/Default.aspx. Error Message:Sample Exception
__________________________
Redirecting users on unhandled errors(在未有處理錯誤情況下重定向用戶)
?
讓我們看看如何在Application級上來捕捉未有錯誤處理而發生的錯誤,并將用戶定向到一個不同的頁面。
要捕捉到未有錯誤處理的錯誤,只需做以下的工作即可。添加一個 Global.asax 文件(右鍵工程項目 > Add New Item > Glabal.asax)。在當中的 Application_Error() 方法中,增加以下代碼: void
Application_Error(object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs
Exception objErr = Server.GetLastError().GetBaseException();
string err = "Error in: " + Request.Url.ToString() +
". Error Message:" + objErr.Message.ToString();
// Log the error
ErrHandler.WriteError(err);
}
?
我們注意到通過使用 Server.GetLastError() 函數來捕捉錯誤。當一個未有錯誤處理的錯誤發生時,要將用戶重定向到不同的頁面,我們要做的是,打開你的 Web.config 文件,并定位到 <customErrors> 標簽處并注銷它。在移除注釋后,標簽看來應該是這樣的:<!--
The <customErrors> section enables configuration
of what to do if/when an unhandled error occurs
during the execution of a request. Specifically,
it enables developers to configure html error pages
to be displayed in place of a error stack trace. -->
<customErrorsmode="RemoteOnly"defaultRedirect="GenericErrorPage.htm">
<errorstatusCode="403"redirect="NoAccess.htm" />
<errorstatusCode="404"redirect="FileNotFound.htm" />
</customErrors>
defaultRedirect="GenericErrorPage.htm" to defaultRedirect="ErrorPage.aspx" 修改為: <customErrorsmode="On"defaultRedirect="ErrorPage.aspx">
<errorstatusCode="403"redirect="NoAccess.htm" />
<errorstatusCode="404"redirect="FileNotFound.htm" />
</customErrors>
這個配置文件將會將用戶導向名為ErrorPage.aspx 的頁面。我們來創建這個錯誤頁面,并顯示一些信息給用戶。
右鍵網站 > Add New Item > 創建 ErrorPage.aspx ,然后顯示一個信息在頁面中,提示用戶有個錯誤發生了。
為了測試這個功能,我們回到 Default.aspx, 添加新的按鈕并命名為 btnUnhandled 并將文本屬性設置為 Throw Unhandled Exception.我們將使用"Divide By Zero"異常。并不去處理它。我們可以發現少了 catch 塊。所以當錯誤發生時,用戶就會按照我們在web.confg文件中設置的重定向到 "ErrorPage.aspx".
protected void btnHandled_Click(object sender, EventArgs e)
{
int i = 9;
int j = 0;
Respone.Write( i / j );
}
?
運行這個程序點擊 "Throw Unhandled Exception" 按鈕。你會發現用戶被自動地定向到了 Error 頁面。并且錯誤也被記錄在 Error 文件夾中。
?
總結
以上是生活随笔為你收集整理的使用ASP.NET 2.0进行记录错误的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Javascript网站繁简转换解决方案
- 下一篇: 代码中的地雷