ASP.NET 跟踪概述
更新:2007 年 11 月
使用 ASP.NET 跟踪可以查看关于 ASP.NET 页的单个请求的诊断信息。使用 ASP.NET 跟踪,可以遵循某页的执行路径、显示运行时的诊断信息和调试应用程序。ASP.NET 跟踪可以与系统级跟踪相集成,在分布式应用程序和多层应用程序中提供多个级别的跟踪输出。
本主题包括:
功能
背景
代码示例
类参考
功能
ASP.NET 跟踪提供以下功能:
Debugging statments 可以在代码中编写调试语句,而不必在将应用程序部署到成品服务器时从应用程序中移除这些语句。您还可以在页中编写变量或结构,并沿着页或应用程序的执行路径进行跟踪。
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 文件进行配置,以便在除显式禁用跟踪的页之外的所有页中显示跟踪信息。设置应用程序级跟踪非常有用,因为这样就不必对各个页进行更改以启用或禁用跟踪。
只有在启用了跟踪后才处理并显示跟踪语句。您可以控制是否将跟踪显示到页上、显示到跟踪查看器或既显示到页上又显示到跟踪查看器。有关如何对页启用跟踪的信息,请参见如何:启用 ASP.NET 页跟踪。有关如何对应用程序启用跟踪的信息,请参见如何:启用 ASP.NET 应用程序跟踪。
应用程序级 ASP.NET 跟踪
可以在 Web.config 文件中使用 trace 元素启用应用程序级跟踪。在启用应用程序级别跟踪时,ASP.NET 将收集对应用程序的每一个请求的跟踪信息,直到达到指定的最大请求数。默认的请求数为 10。默认情况下,当跟踪查看器达到其请求限制时,应用程序将停止存储跟踪请求。可以对跟踪进行配置,指定是存储最早的跟踪数据(丢弃新项)还是存储最新的跟踪信息(丢弃旧项)。
![]() |
---|
在 Web.config 文件中对整个应用程序启用跟踪时,将为该应用程序中的每个页收集并处理跟踪信息。若要重写应用程序范围的设置,请在该页的 @ Page 指令中将 Trace 属性设置为 false。对于在页的代码中包含的任何 Write 或 Warn 语句,将存储该语句并只将其返回到跟踪查看器。 |
查看跟踪信息
可以在各个页的底部查看跟踪信息。此外,在启用跟踪后,可以使用跟踪查看器 (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 页中的跟踪显示或追加到跟踪日志。使用跟踪查看器可以查看写入跟踪日志的跟踪信息。有关更多信息,请参见如何:使用跟踪查看器查看 ASP.NET 跟踪信息。
可以使用 TraceContext 类的 Warn 或 Write 方法写入跟踪信息。这两种方法的不同之处在于用 Warn 方法编写的消息显示为红色文本。
下面的示例演示如何使用 TraceContext 类在 ASP.NET 页的末尾显示跟踪信息。对引起回发的每一 LinkButton 控件都会引发一个不同的例外。用于初始化 ArgumentException 或 InvalidOperationException 实例的错误消息显示在跟踪日志中。
<%@ Page Language="VB" Trace="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<script runat="server">
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 runat="server">
<title>Trace Example</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:LinkButton id="WriteLink"
runat="server"
text="Generate Trace Write" />
<asp:LinkButton id="WarnLink"
runat="server"
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 runat="server">
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 runat="server">
<title>Trace Example</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:LinkButton id="WriteLink"
runat="server"
text="Generate Trace Write" />
<asp:LinkButton id="WarnLink"
runat="server"
text="Generate Trace Warn" />
</div>
</form>
</body>
</html>
读取 ASP.NET 跟踪信息
可以在 ASP.NET 页的末尾或跟踪查看器中查看追加的跟踪信息。两种情况下显示的信息是相同的。ASP.NET 将跟踪信息组织在一系列的表中。有关如何在页中查看跟踪信息的信息,请参见如何:启用 ASP.NET 页跟踪。有关如何在跟踪查看器中查看跟踪信息的信息,请参见如何:使用跟踪查看器查看 ASP.NET 跟踪信息。
跟踪信息按下列顺序显示。
请求详细信息
“请求详细信息”部分显示关于当前请求和响应的常规信息。
值 |
说明 |
---|---|
会话 ID |
指定请求的会话标识。 |
请求的时间 |
发出请求的时间。 |
请求编码 |
请求的字符编码。 |
请求类型 |
HTTP 方法(GET 或 POST)。 |
状态代码 |
与响应关联的状态代码值。有关更多信息,请参见位于 World Wide Web Consortium (W3C) Web site(万维网联合会 (W3C) 网站)上的 RFC 2616。 |
响应编码 |
响应的字符编码。 |
跟踪信息
“跟踪信息”部分显示页级事件流。如果创建了自定义跟踪消息,这些消息也将显示在“跟踪信息”部分。
值 |
说明 |
---|---|
类别 |
|
消息 |
|
自第一个跟踪语句以来的时间(秒) |
自处理第一条跟踪消息以来的运行时间(以秒为单位)。第一条跟踪消息显示在列表顶端。 |
自上一个跟踪语句以来的时间(秒) |
处理当前跟踪消息与处理上一个跟踪消息之间经过的时间(以秒为单位)。 |
控件树
“控件树”部分显示有关在页中创建的 ASP.NET 服务器控件的信息。
值 |
说明 |
---|---|
控件 ID |
|
类型 |
控件的完全限定类型。 |
呈现大小字节数 |
所呈现的控件(包括子控件)的大小(以字节为单位)。这是发送到浏览器的实际 HTML、XML 或其他格式的大小。 |
ViewState 大小字节数 |
控件的视图状态(不包括子控件)的大小(以字节为单位)。For more information, see ASP.NET 状态管理概述. |
ControlState 大小字节数 |
控件的控件状态(不包括子控件)的大小(以字节为单位)。有关更多信息,请参见 ASP.NET 状态管理概述。 |
会话状态
“会话状态”部分显示有关存储在会话状态中的值(如果有的话)的信息。有关更多信息,请参见 ASP.NET 会话状态概述。
值 |
说明 |
---|---|
会话密钥 |
存储在会话状态中的数据的密钥(如果有的话)。 |
类型 |
存储数据的对象的完全限定类型。 |
值 |
存储在会话状态中的数据的字符串表示形式(如果有的话)。 |
应用程序状态
“应用程序状态”部分显示关于存储在应用程序状态中的值(如果有的话)的信息。有关更多信息,请参见 ASP.NET 应用程序状态概述。
值 |
说明 |
---|---|
应用程序键 |
存储在应用程序状态中的数据的键(如果有的话)。 |
类型 |
存储数据的对象的完全限定类型。 |
值 |
存储在应用程序状态中的数据(如果有)的字符串表示形式。 |
Cookie 集合
“请求 Cookie”和“响应 Cookie”部分显示对于每个请求和响应在浏览器与服务器之间传递的 Cookie 的有关信息。该部分既显示持久性 Cookie,也显示会话 Cookie。ASP.NET 自动创建一些 Cookie,如用于基于 Cookie 的会话状态和 Forms 身份验证的 Cookie。有关更多信息,请参见 ASP.NET Cookie 概述。
值 |
说明 |
---|---|
名称 |
Cookie 的名称。 |
值 |
Cookie 的值,如果 Cookie 为多值,则为子项和值。 |
大小 |
Cookie 的大小(以字节为单位)。 |
标头集合
“标头集合”部分显示关于请求和响应消息的标头名称/值对(提供关于消息体或所请求的资源的信息)的信息。标头信息用于控制请求消息的处理方式和响应消息的创建方式。有关 HTTP 标头的更多信息,请参见位于 World Wide Web Consortium (W3C) Web site(万维网联合会 (W3C) 网站)上的 RFC 2616。
值 |
说明 |
---|---|
名称 |
标头的名称。 |
值 |
标头的值。 |
窗体集合
“窗体集合”部分显示名称/值对,这些名称值/对显示在 POST 操作(回发)期间的请求中提交的窗体元素值(控件值)。
值 |
说明 |
---|---|
名称 |
窗体变量的名称。 |
值 |
窗体变量的值。 |
Querystring 集合
“Querystring 集合”部分显示在 URL 中传递的值。在 URL 中,查询字符串信息通过问号 (?) 与路径信息分隔开;多个查询字符串元素用 & 符分隔开。查询字符串名称/值对以等号 (=) 分隔。HttpRequest 对象的 QueryString 属性返回查询字符串变量的 NameValueCollection。
值 |
说明 |
---|---|
名称 |
查询字符串变量的名称。 |
值 |
查询字符串变量的值。 |
服务器变量
“服务器变量”部分显示服务器相关的环境变量的集合和请求标头信息。HttpRequest 对象的 ServerVariables 属性返回服务器变量的 NameValueCollection。
值 |
说明 |
---|---|
名称 |
服务器变量的名称。 |
值 |
服务器变量的值。 |
返回页首
ASP.NET 跟踪和诊断跟踪
ASP.NET 跟踪会写下在 ASP.NET 网页和 ASP.NET 跟踪查看器 (Trace.axd) 上显示的消息。与此相反,System.Diagnostics.Trace 类用于跟踪发送到标准 .NET Framework 跟踪输出(通常是控制台窗口)的写消息。为了更便于跟踪 ASP.NET 网页如何与业务对象及其他组件进行交互,可以将 ASP.NET 跟踪输出与 System.Diagnostics 跟踪集成在一起。然后,可以将所有跟踪消息路由到其中一个输出。
同时使用 ASP.NET 跟踪和 System.Diagnostics.Trace 的一个常见方案是网页使用中间层业务对象与数据和业务规则进行交互。您还可以将 System.Diagnostics.Trace 跟踪用于使用企业服务(如事务和队列)的页。在这些情况下,业务和企业组件在成功执行该页的过程中发挥重要作用。此外,使用单个跟踪输出跨多个层来监视执行流有助于进行应用程序分析。有关更多信息,请参见如何:启用 ASP.NET 应用程序跟踪。
跟踪配置属性
下表显示可在 Web.config 文件的 trace 元素中用来修改应用程序级跟踪行为的属性。
属性 |
说明 |
---|---|
若要对应用程序启用跟踪,则为 true;否则为 false。默认值为 false。通过在页的 @ Page 指令中将 Trace 属性设置为 true 或 false,可以为各个页重写此设置。 |
|
若要在页中和跟踪查看器 (Trace.axd) 中显示跟踪,则为 true;否则为 false。默认值为 false。 ![]()
启用了跟踪的各个页不受该设置的影响。
|
|
要在服务器上存储的跟踪请求数。默认值为 10。 |
|
跟踪信息的显示顺序。设置为 SortByTime 可以按信息的处理顺序进行排序。设置为 SortByCategory 可以根据用户定义的类别按字母顺序进行排序。默认为 SortByTime。 |
|
若要使跟踪查看器 (Trace.axd) 只在主机 Web 服务器上可用,则为 true;否则为 false。默认值为 true。 |
|
如果将最新的跟踪信息作为跟踪输出进行显示,则为 true;否则为 false。如果此值为 false,则在超出 requestLimit 值后,不再存储新的请求。默认值为 false。 ![]()
超出 requestLimit 属性所定义限制的跟踪数据将被丢弃,只有在 mostRecent 为 true 时,才会提供最新的数据。
|
代码示例
帮助和演练主题
演练:将 ASP.NET 跟踪与 System.Diagnostics 跟踪集成
返回页首
类参考
类 |
说明 |
用于实现跟踪的主类。 |
|
捕获并提供有关 Web 请求的执行详细信息。 |
返回页首
请参见
概念
参考
返回页首