ASP.NET 追蹤概觀

更新:2007 年 11 月

ASP.NET 追蹤能夠讓您檢視 ASP.NET 網頁的單一要求診斷資訊。ASP.NET 追蹤能夠讓您依照網頁的執行路徑、在執行階段顯示診斷資訊,以及偵錯應用程式。ASP.NET 追蹤能夠與系統層級追蹤整合,以便在分散式和多層應用程式中提供多重層級的追蹤輸出。

這個主題包含:

  • 功能

  • 背景

  • 程式碼範例

  • 類別參考

功能

ASP.NET 追蹤提供下列功能:

  • Debugging statments:您可以在程式碼中撰寫偵錯陳述式,而無需在將應用程式部署至實際執行伺服器 (Production Server) 時從應用程式中移除這些陳述式。您也可以在網頁中撰寫變數或結構,並透過網頁或應用程式的執行路徑進行追蹤。

  • Integrated tracing functionality:您可以將 System.Diagnostics.Trace 類別所發出的訊息傳送至 ASP.NET 追蹤輸出,並且將 ASP.NET 追蹤發出的訊息傳送至 System.Diagnostics.Trace。您也可以將 ASP.NET 檢測事件轉寄至 System.Diagnostics.Trace。如需詳細資訊,請參閱逐步解說:將 ASP.NET 追蹤與 System.Diagnostics 追蹤整合

  • Programmatic access to trace messages:您可以從程式碼存取和管理追蹤訊息,以便更細微地控制追蹤訊息的格式,或是進行其他必要的處理。

  • Application-level tracing:應用程式層級追蹤選項,可以讓您在不需要重新啟動追蹤工作階段,或增加伺服器必須儲存的追蹤資料量的情況下,檢視最新的可用追蹤資料。這樣可顯示最新的追蹤資料,同時捨棄舊的追蹤資料。

回到頁首

背景

追蹤會將診斷資訊和自訂追蹤訊息附加至頁面的輸出,並將這項資訊傳送給提出要求的瀏覽器。或者,您可以從不同的追蹤檢視器 (Trace.axd) 檢視這項資訊,這個檢視器會顯示 ASP.NET Web 應用程式中每個網頁的追蹤資訊。追蹤資訊可以幫助您調查 ASP.NET 處理網頁要求時所發生的錯誤或不想要的後果。

您可以將個別網頁設定為顯示追蹤資訊。此外,您可以設定應用程式的 Web.config 檔,讓所有網頁都顯示追蹤資訊 (除非網頁明確停用追蹤)。設定應用程式層級追蹤是很有用的,因為您不需要變更個別網頁就可以啟用和停用追蹤。

只有在啟用追蹤時才會處理和顯示追蹤陳述式。您可以控制追蹤是否要顯示到網頁、追蹤檢視器,或顯示到兩者。如需啟用頁面追蹤的詳細資訊,請參閱 HOW TO:啟用 ASP.NET 網頁的追蹤。如需啟用應用程式追蹤的詳細資訊,請參閱 HOW TO:啟用 ASP.NET 應用程式的追蹤

應用程式層級 ASP.NET 追蹤

您可以使用 Web.config 檔案中的 trace 項目,啟用應用程式層級追蹤。當您啟用應用程式層級追蹤時,ASP.NET 會收集對應用程式各個要求的追蹤資訊,最多達到指定的最大要求數。要求的預設數目為 10。根據預設,當追蹤檢視器到達要求限制時,應用程式會停止儲存追蹤要求。您可以將追蹤設定為儲存最舊的追蹤資料 (捨棄較新的項目) 或最新的追蹤資訊 (捨棄較舊的項目)。

注意事項:

當您在 Web.config 檔中啟用整個應用程式的追蹤時,就會對該應用程式的每個網頁收集和處理追蹤資訊。若要覆寫整個應用程式的設定,請將該網頁的 @ Page 指示詞中的 Trace 屬性設定為 false。包括在網頁程式碼中的任何 WriteWarn 陳述式只會存放並傳回至追蹤檢視器。

檢視追蹤資訊

您可以檢視個別頁面底部的追蹤資訊。此外,在啟用追蹤後,您也可以使用追蹤檢視器 (Trace.axd) 檢視 ASP.NET 所收集和快取的追蹤資訊。如需追蹤顯示之內容的詳細資訊,請參閱本主題稍後的讀取 ASP.NET 追蹤資訊。

如果您想要讓追蹤資訊出現在關聯的網頁結尾處,可以將 trace 項目的 PageOutput 屬性設定為 true。如果您啟用應用程式層級追蹤,但是不想顯示某些網頁的追蹤資訊,可以將這些網頁的 @ Page 指示詞中的 Trace 屬性設定為 false。如需如何設定 ASP.NET 應用程式的詳細資訊,請參閱 ASP.NET 組態概觀

依預設,應用程式層級追蹤只能在本機 Web 伺服器電腦上檢視。若要讓遠端電腦能夠看見應用程式層級追蹤資訊,可以將 trace 項目的 LocalOnly 屬性設定為 false。

注意事項:

若要保護 Web 應用程式的安全,請只在開發或部署應用程式時才使用遠端追蹤功能。確定您已先停用此功能,再將應用程式傳輸至實際執行的 Web 伺服器。若要這麼做,請將 Web.config 檔案中的 LocalOnly 屬性設定為 true。

下列範例示範應用程式追蹤設定,此設定會收集最多 40 個要求的追蹤資訊。也可讓伺服器以外之電腦上的瀏覽器顯示追蹤檢視器。

<configuration>
  <system.web>
    <trace enabled="true" requestLimit="40" localOnly="false" />
  </system.web>
</configuration>

寫入自訂 ASP.NET 追蹤訊息

您可以將自訂的追蹤資訊附加至 ASP.NET 頁面中的追蹤顯示,或追蹤記錄檔。可以使用追蹤檢視器檢視寫入追蹤記錄檔的追蹤資訊。如需詳細資訊,請參閱 HOW TO:使用追蹤檢視器檢視 ASP.NET 追蹤資訊

您可以使用 TraceContext 類別的 WarnWrite 方法,撰寫追蹤資訊。兩種方法之間的差異是使用 Warn 方法寫入的訊息會以紅色文字顯示。

下列範例示範如何使用 TraceContext 類別,在 ASP.NET 頁面的結尾顯示追蹤資訊。每個造成回傳的 LinkButton 控制項都會擲回不同的例外狀況。用來初始化 ArgumentExceptionInvalidOperationException 執行個體的錯誤訊息會顯示在追蹤記錄檔中。

<%@ Page Language="VB" Trace="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<script >

  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)

    Try
      If (IsPostBack) Then

        Select Case Request.Form("__EVENTTARGET")
          Case "WarnLink"
            Throw New ArgumentException("Trace warn.")
          Case "WriteLink"
            Throw New InvalidOperationException("Trace write.")
          Case Else
            Throw New ArgumentException("General exception.")
        End Select  
      End If
    Catch ae As ArgumentException
      Trace.Warn("Exception Handling", "Warning: Page_Load.", ae)
    Catch ioe As InvalidOperationException
      Trace.Write("Exception Handling", "Exception: Page_Load.", ioe)
    End Try
  End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
    <title>Trace Example</title>
</head>
<body>
    <form id="form1" >
    <div>
      <asp:LinkButton id="WriteLink" 
                      
                      text="Generate Trace Write" />
      <asp:LinkButton id="WarnLink"
                      
                      text="Generate Trace Warn" />
    </div>
    </form>
</body>
</html>
<%@ Page Language="C#" Trace="true"  %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<script >
void Page_Load(object sender, EventArgs e)
{
    try {
      if (IsPostBack)
      {

        switch (Request.Form["__EVENTTARGET"])
        {
          case "WarnLink":
            throw new ArgumentException("Trace warn.");
            break;
          case "WriteLink":
            throw new InvalidOperationException("Trace write.");
            break;
          default:
            throw new ArgumentException("General exception.");
            break;          
        }
      }
    }
    catch (ArgumentException ae) {    
        Trace.Warn("Exception Handling", "Warning: Page_Load.", ae);
    }
    catch (InvalidOperationException ioe) {    
        Trace.Write("Exception Handling", "Exception: Page_Load.", ioe);
    }
}

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
    <title>Trace Example</title>
</head>
<body>
    <form id="form1" >
    <div>
      <asp:LinkButton id="WriteLink" 
                      
                      text="Generate Trace Write" />
      <asp:LinkButton id="WarnLink"
                      
                      text="Generate Trace Warn" />
    </div>
    </form>
</body>
</html>

讀取 ASP.NET 追蹤資訊

您可以檢視附加在 ASP.NET 網頁結尾或是追蹤檢視器中的追蹤資訊,而在兩種情況下顯示的資訊都一樣。ASP.NET 會將追蹤資訊整理在一系列表格中。如需如何檢視頁面中之追蹤資訊的詳細資訊,請參閱 HOW TO:啟用 ASP.NET 網頁的追蹤。如需如何檢視追蹤檢視器中之追蹤資訊的詳細資訊,請參閱 HOW TO:使用追蹤檢視器檢視 ASP.NET 追蹤資訊

追蹤資訊會以下列順序顯示:

要求詳細資料

[要求詳細資料] 區段會顯示目前要求和回應的一般資訊。

說明

工作階段 ID

指定要求的工作階段識別。

要求的時間

發出要求的時間。

要求的編碼方式

要求的字元編碼方式。

要求類型

HTTP 方法 (GET 或 POST)。

狀態碼

與回應相關的狀態碼值。如需詳細資訊,請參閱 World Wide Web Consortium (W3C) 網站 的 RFC 2616。

回應的編碼方式

回應的字元編碼方式。

追蹤資訊

[追蹤資訊] 區段會顯示網頁層級事件的流程。如果您已建立自訂追蹤訊息,訊息也會顯示在 [追蹤資訊] 區段中。

說明

分類

自訂追蹤分類會在 WarnWrite 方法呼叫中指定 (如果有)。

訊息

自訂追蹤訊息會在 WarnWrite 方法中指定 (如果有)。

從第一項開始 (秒)

自處理第一個追蹤訊息以來經過的時間 (以秒計)。第一個追蹤訊息會顯示在清單最上方。

從最末項開始 (秒)

處理目前追蹤訊息和前一個追蹤訊息之間經過的時間 (以秒計)。

控制項樹狀結構

[控制項樹狀結構] 區段會顯示網頁中建立之 ASP.NET 伺服器控制項的資訊。

說明

控制項 ID

控制項的識別。如果您沒有指定控制項的 ID 屬性,ASP.NET 會使用 UniqueID 屬性產生 ID

類型

控制項的完整型別。

呈現大小位元組

呈現控制項 (包括子控制項) 的大小 (以位元組為單位)。這是實際 HTML、XML 或傳送至瀏覽器的其他格式大小。

ViewState 大小位元組

控制項檢視狀態 (不包括子控制項) 的大小 (以位元組為單位)。如需詳細資訊,請參閱 ASP.NET 狀態管理概觀

ControlState 大小位元組

控制項控制狀態 (不包括子控制項) 的大小 (以位元組為單位)。如需詳細資訊,請參閱 ASP.NET 狀態管理概觀

工作階段狀態

[工作階段狀態] 區段會顯示儲存在工作階段狀態中之值 (如果有的話) 的相關資訊。如需詳細資訊,請參閱 ASP.NET 工作階段狀態概觀

說明

工作階段金鑰

儲存在工作階段狀態的資料索引鍵 (如果有)。

類型

儲存資料的物件的完整型別。

儲存在工作階段狀態的資料字串表示 (如果有)。

應用程式狀態

[應用程式狀態] 區段會顯示儲存在應用程式狀態中值的相關資訊 (如果有的話)。如需詳細資訊,請參閱 ASP.NET 應用程式狀態概觀

說明

應用程式索引鍵

以應用程式狀態儲存的資料索引鍵 (如果有)。

類型

儲存資料的物件的完整型別。

儲存在應用程式狀態中之資料的字串表示 (如果有的話)。

[要求 Cookie] 和 [回應 Cookie] 區段會顯示在每個要求和回應時,在瀏覽器與伺服器之間所傳遞 Cookie 的資訊。區段會同時顯示持續性和工作階段 Cookie。ASP.NET 會自動建立某些 Cookie,例如 Cookie 架構工作階段狀態和表單驗證的 Cookie。如需詳細資訊,請參閱 ASP.NET Cookie 概觀

說明

名稱

Cookie 的名稱。

Cookie 的值或子機碼 (Subkey) 和值 (如果 Cookie 是多重值)。

大小

Cookie 的大小 (以位元組為單位)。

標頭集合

[標頭集合] 區段會顯示要求和回應訊息標頭名稱/值組的資訊,提供訊息主體或要求資源的資訊。標頭資訊是用來控制處理要求訊息和建立回應訊息的方式。如需 HTTP 標頭的詳細資訊,請參閱全球資訊網協會 (W3C) 網站 的 RFC 2616 (英文)。

說明

名稱

標頭的名稱。

標頭的值。

表單集合

[表單集合] 區段會顯示名稱/值組,其中會顯示 POST 作業 (回傳) 期間在要求中送出的表單項目值 (控制項值)。

說明

名稱

表單變數的名稱。

表單變數的值。

Querystring 集合

[Querystring 集合] 區段會顯示 URL 中傳遞的值。在 URL 中會用問號 (?) 分隔查詢字串資訊和路徑資訊,並使用 (&) 符號分隔多個查詢字串項目。查詢字串名稱/值組會使用等號 (=) 分隔。HttpRequest 物件的 QueryString 屬性會傳回查詢字串變數的 NameValueCollection

說明

名稱

查詢字串變數的名稱。

查詢字串變數的值。

伺服器變數

[伺服器變數] 區段會顯示伺服器相關環境變數和要求標頭資訊的集合。HttpRequest 物件的 ServerVariables 屬性會傳回伺服器變數的 NameValueCollection

說明

名稱

伺服器變數的名稱。

伺服器變數的值。

回到頁首

ASP.NET 追蹤和診斷追蹤

ASP.NET 追蹤所撰寫的訊息會顯示在 ASP.NET Web 網頁和 ASP.NET 追蹤檢視器 (Trace.axd)。相反地,System.Diagnostics.Trace 類別是用來追蹤撰寫至標準 .NET Framework 追蹤輸出 (通常是主控台視窗) 的訊息。為了讓您更容易追蹤 ASP.NET 網頁與商務物件 (Business Object) 及其他元件互動的方式,可以將 ASP.NET 追蹤輸出與 System.Diagnostics 追蹤加以整合。然後將所有追蹤訊息傳輸至其中一個輸出。

同時使用 ASP.NET 追蹤和 System.Diagnostics.Trace 的常見情形,是使用中介層商務物件與資料及商務規則互動的網頁。您也可以使用頁面的 System.Diagnostics.Trace 追蹤,此頁面會使用像交易和佇列等企業服務。在這種情況下,商務和企業元件對於頁面的順利執行十分重要。此外,這項追蹤也可以使用一個追蹤輸出,幫助應用程式分析監視多層的執行流程。如需詳細資訊,請參閱 HOW TO:啟用 ASP.NET 應用程式的追蹤

追蹤組態屬性

下表說明您可以在 Web.config 檔案的 trace 項目中,用來修改應用程式層級追蹤行為的屬性。

屬性

說明

Enabled

true 為啟用應用程式追蹤,否則為 false。預設值為 false。您可以將頁面的 @ Page 指示詞中的 Trace 屬性,設定為 true 或 false,覆寫個別頁面的這項追蹤設定。

PageOutput

true 以便同時在網頁和追蹤檢視器 (Trace.axd) 中顯示追蹤,否則為 false。預設值為 false。

注意事項:
已啟用追蹤的個別網頁不受這項設定影響。

RequestLimit

要儲存在伺服器上的追蹤要求數。預設值為 10。

TraceMode

追蹤資訊的顯示順序。設定 SortByTime 以便依照處理資訊的順序排序。設定 SortByCategory 以便依照使用者定義的分類依字母順序排序。預設值為 SortByTime

LocalOnly

true 指示追蹤檢視器 (trace.axd) 只能在主機 Web 伺服器上使用,否則為 false。預設值為 true。

MostRecent

true 會將最近的追蹤資訊顯示成追蹤輸出,否則為 false。如果此值為 false,當超出 requestLimit 值時,就不會儲存新的要求。預設值為 false。

注意事項:
只有在 mostRecent 是 true 時,才會只針對最新的資料捨棄超過 requestLimit 屬性定義限制的追蹤資料。

程式碼範例

使用說明和逐步解說主題

HOW TO:啟用 ASP.NET 網頁的追蹤

HOW TO:啟用 ASP.NET 應用程式的追蹤

HOW TO:使用追蹤檢視器檢視 ASP.NET 追蹤資訊

逐步解說:將 ASP.NET 追蹤與 System.Diagnostics 追蹤整合

回到頁首

類別參考

類別

說明

System.Diagnostics.Trace

實作追蹤的主要類別。

TraceContext

擷取並提出關於 Web 要求的執行詳細資料。

回到頁首

請參閱

概念

效能、疑難排解與偵錯

參考

回到頁首