asp.net記錄錯誤記錄檔

來源:互聯網
上載者:User

在本文中,我們將通過一個簡單的處理來記錄在我們的網站中的錯誤和異常。我們會這樣操作:每當遇到程式錯誤時,將使用者導航到一個單獨的頁面。同時,錯誤將被記錄到伺服器上的一個文字檔。每當錯誤發生時,我們將以日誌的形式每天記錄。說了這麼多,讓我們來看一些代碼。
步驟一:首先建立一個錯誤檔案夾用於存放錯誤記錄檔檔案。滑鼠右鍵網站 > 建立新檔案夾。將該檔案夾命名為"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>

將: mode="RemoteOnly"tomode="On"
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 檔案夾中。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.