熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

使用ASP.NET 2.0進行記錄錯誤

2013-11-13 10:12:33  來源: .NET編程 

  在本文中我們將通過一個簡單的處理來記錄在我們的網站中的錯誤和異常我們會這樣操作每當遇到程序錯誤時將使用者導航到一個單獨的頁面同時錯誤將被記錄到服務器上的一個文本文件每當錯誤發生時我們將以日志的形式每天記錄說了這麼多讓我們來看一些代碼

  步驟一首先創建一個錯誤文件夾用於存放錯誤日志文件鼠標右鍵站點 > 創建新文件夾將該文件夾命名為Error 如果站點中沒有 nfig 文件時請添加一個 右鍵站點 > 添加新項目 > nfig

  步驟二現在我們要創建一個錯誤處理的代碼我們只需要右鍵站點 > 添加新項目 > 選擇類 重命名該類為ErrHandlercs 然後單擊 添加 按鈕當你這麼操作的時候會彈出一個對話框是否要將這個類文件保存在App_Code裡面我們選擇接受

  步驟三現在我們為ErrHandlerclass添加一些功能該類用於接受錯誤信息並將錯誤信息保存在一個文本文件中每天創建一個這樣的文本文件如果已經存在相同的文件名時錯誤信息將會追加到這個文件中否則就創建一個新文件並將錯誤信息寫入該文件

  代碼看來如下   /// 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/ + DateTimeTodayToString(ddmmyy) + txt;
            if (!FileExists(SystemWebHttpContextCurrentServerMapPath(path)))
            {
                FileCreate(SystemWebHttpContextCurrentServerMapPath(path))Close();
            }
            using (StreamWriter w = FileAppendText(SystemWebHttpContextCurrentServerMapPath(path)))
            {
                wWriteLine(\r\nLog Entry : );
                wWriteLine({} DateTimeNowToString(CultureInfoInvariantCulture));
                string err = Error in: + SystemWebHttpContextCurrentRequestUrlToString() +
                              Error Message: + errorMessage;
                wWriteLine(err);
                wWriteLine(__________________________);
                wFlush();
                wClose();
            }
        }
        catch (Exception ex)
        {
            WriteError(exMessage);
        }
    }

  這就是我們的ErrHandler類了然後我們來看看如何使用這個類和在Page級中(Application級中)處理錯誤

  在Page級中處理錯誤

  在Defaultaspx中從工具箱中添加一個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
            ErrHandlerWriteError(exMessage);
        }
    }

    現在運行程序並點擊按鈕因為我們已經在代碼中處理了錯誤和記錄下了異常你會發現當點擊按鈕時似乎什麼也沒發生關閉程序刷新Error文件夾你會看到有個以今天日期為文件名的新文件被創建異常已經被成功記錄下如下所示其中日期和時間在您的機器上會有所不同  Log Entry :
// ::
Error in:x Error Message:Sample Exception
__________________________

  Redirecting users on unhandled errors(在未有處理錯誤情況下重定向用戶)

  讓我們看看如何在Application級上來捕捉未有錯誤處理而發生的錯誤並將用戶定向到一個不同的頁面

  要捕捉到未有錯誤處理的錯誤只需做以下的工作即可添加一個 Globalasax 文件(右鍵工程項目 > Add New Item > Glabalasax)在當中的 Application_Error() 方法中增加以下代碼  void Application_Error(object sender EventArgs e)
    {
        // Code that runs when an unhandled error occurs
        Exception objErr = ServerGetLastError()GetBaseException();
        string err = Error in: + RequestUrlToString() +
                          Error Message: + objErrMessageToString();
        // Log the error
        ErrHandlerWriteError(err);
    }

    我們注意到通過使用 ServerGetLastError() 函數來捕捉錯誤當一個未有錯誤處理的錯誤發生時要將用戶重定向到不同的頁面我們要做的是打開你的 nfig 文件並定位到 <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=RemoteOnlydefaultRedirect=
                        <errorstatusCode=redirect= />
                        <errorstatusCode=redirect= />
                  </customErrors>

    將  mode=RemoteOnlytomode=On
defaultRedirect= to defaultRedirect=ErrorPageaspx    修改為  <customErrorsmode=OndefaultRedirect=ErrorPageaspx
                        <errorstatusCode=redirect= />
                        <errorstatusCode=redirect= />
                  </customErrors>

  這個配置文件將會將用戶導向名為ErrorPageaspx 的頁面我們來創建這個錯誤頁面並顯示一些信息給用戶

  右鍵網站 > Add New Item > 創建 ErrorPageaspx 然後顯示一個信息在頁面中提示用戶有個錯誤發生了

  為了測試這個功能我們回到 Defaultaspx 添加新的按鈕並命名為 btnUnhandled 並將文本屬性設置為 Throw Unhandled Exception我們將使用Divide By Zero異常並不去處理它我們可以發現少了 catch 塊所以當錯誤發生時用戶就會按照我們在nfg文件中設置的重定向到 ErrorPageaspx  protected void btnHandled_Click(object sender EventArgs e)
{
      int i = ;
      int j = ;
      ResponeWrite( i / j );
}

    運行這個程序點擊 Throw Unhandled Exception 按鈕你會發現用戶被自動地定向到了 Error 頁面並且錯誤也被記錄在 Error 文件夾中
From:http://tw.wingwit.com/Article/program/net/201311/12907.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.