http://m.blog.csdn.net/article/details?id=7026402

当我们扑捉程序错误时,调试器是开发者们最得力的助手。
然而,ASP.NET的跟踪,在调试时是一个很棒的不容忽视的辅助,它允许你的ASP.NET代码在执行期间输出消息,提供有用信息有效帮助你发现问题所在。

调试器和跟踪这两个技术有一点区别。
调试器是一种自然的交互技术它依赖于你有能力暂停程序执行并检查当前的状态。
而跟踪是一种不干扰系统运行,简单的输出代码设定的跟踪信息(类似于经典的“printf”式调试),在执行结束时,你可以取得跟踪代码产生的输出并分析它。

ASP.NET跟踪子系统通过控件,页面或者可以增加自身跟踪输出的组件显露出一个API,可以输出任何可用到的信息给你一些有意义的帮助。
在ASP.NET中,跟踪与页面和运行时紧密的整合在一起。

可以通过

<%@ Page Trace="true"

在单独的某页上启用跟踪,这种情况下跟踪信息作为页面的一部分发送给浏览器来显示。

也可以修改web.config中

<trace enabled="true">

启用整站的跟踪,通过 http://网站/Trace.axd 就可以进行追踪访问。

跟踪作为一个子系统构建为ASP.NET的一个基础结构,给应用程序提供诊断信息关于某个单独请求。
通过跟踪,你可以分析浏览器和WEB服务器交换的数据,包括请求的详细信息,时间调配信息,服务器变量,Cookies,头信息,Session状态等等。

代码添加Trace机制

//在Page或其继承类中
Trace.Write("Your message");

//ASP.NET 应用程序的任意地方,通过HttpContext的Trace属性显露TraceContext类的一个实例给开发者
HttpContext.Current.Trace.Write("Your message");

TraceContext类还有一个Warn方法,跟Write不同的是它将文本呈现为红色。Write和Warn都有一些重载方法:

// Write overloads重载
public void Write ( String message )
public void Write ( String category , String message )
public void Write ( String category , String message , Exception errorInfo )
  
// Match Warn overloads
public void Warn ( String message )
public void Warn ( String category , String message )
public void Warn ( String category , String message , Exception errorInfo )

第一个重载将跟踪消息写入跟踪日志。
第二个重载接受跟踪类别和跟踪内容,跟踪类别可以使用简短的跟踪信息,也可以是任何对应用程序或消息有用的字符串。
第三个重载将跟踪信息写入跟踪日志,包括用户定义的所有类别、跟踪消息和错误信息。跟踪日志不接受HTML格式,文本在呈现到浏览器之前转义。

例如:

Trace.Warn("跟踪分类", "跟踪信息",new Exception("出错了,数据对象为空"));

显示为:

TraceContext类其他两个属性:
IsEnabled属性 是布尔类型,表示当前 Web 请求是否启用跟踪。
TraceMode属性 设置跟踪消息输出的排序顺序,一个枚举类型,包含SortByCategory(分类) 和 SortByTime(时间)。

可以编写程序设置IsEnable来启用跟踪。

在ASP.NET 2.0中,也可以使用新的属性Page类的TraceEnabled,该属性仅仅是对Trace.IsEnabled的包装。

public class Page : TemplateControl, IHttpHandler
    {
        //     设置一个值,该值指示是否为 System.Web.UI.Page 对象启用跟踪。
        //     如果为该页启用跟踪,则为 true;否则为 false。默认值为 false。
        [Browsable(false)]
        [EditorBrowsable(EditorBrowsableState.Never)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        public bool TraceEnabled { get; set; }
        //     设置跟踪语句在页中的显示模式。
        //     System.Web.TraceMode 枚举成员之一。
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        [Browsable(false)]
        [EditorBrowsable(EditorBrowsableState.Never)]
        public TraceMode TraceModeValue { get; set; }

……

}

ASP.NET 2.0中web.config配置如下:

<trace
   enabled="true|false"
   localOnly="true|false"
   mostRecent="true|false"
   pageOutput="true|false"
   requestLimit="integer"
   traceMode="SortByTime|SortByCategory"
   writeToDiagnosticsTrace="true|false" />

ASP.NET内建的跟踪查看器--trace.axd,

Trace.axd是一个系统定义的HTTP handler,获取内部跟踪信息的缓存并显示到Web接口。

通过请求 应用程序根目录下的trace.axd(http://网站/Trace.axd) 访问跟踪查看器,

也可以给页面请求增加id=xxx参数 (http://网站/Trace.axd?id=0开始)来直接访问某个指定跟踪信息。

注意:
1. 属性enabled
通过enabled="true"激活trace.axd工具,但是不激活 跟踪信息作为页面的一部分 进行输出。
这样可以启用追踪不影响用户页面的输出。
这样做使得你可以在产品中打开跟踪却不影响用户页面的输出。原因见(2属性pageOutput)
如:
<trace enabled="true" />
2.属性pageOutput 表示是否在任意页中显示跟踪输出
默认false,这样配置
<trace enabled="true" pageOutput="false" />
可以省略pageOutput="false" 。

所有的跟踪信息被TraceContext类缓存在一个DataSet对象中,
当应用程序的AppDomain的HttpRuntime对象首次被初始化时,
TraceContext类将被实例化。
结果是当trace.axd被启用时,维护的跟踪信息越多,内存方面的消耗越多。

ASP.NET 2.0的一个新特性是允许使用TraceContext.TraceFinished事件,
在收集完所有请求信息后被引发。
TraceFinished处理程序提供了一个TraceFinishedEventArgs参数接受跟踪消息(TraceRecord)对象集合。
每一条存储了一个单独的ASP.NET跟踪消息和所有相关数据,
允许你采集这些信息并随意进行处理,
显示到页面或者记录到自己的数据库等等 。

ASP.NET下的跟踪跟.NET Framework直接相关,Systems.Diagnostics命名空间定义了两个类: Trace 和 Debug. 
它们提供了对代码进行跟踪的常用方法。
Trace 和 Debug类本质相同,都工作在很多特定模块之上例如侦听器。

侦听器搜集并将消息存储到Windows事件日志,文本文件,或者其他类似文件中。
每个应用程序可以有它自己的一套侦听器;
所有注册过的侦听器接受全部的发布消息。
ASP.NET 2.0中跟踪子系统被进一步加强,可以转发ASP.NET跟踪信息给任意一个已注册的.NET跟踪侦听器。
通过打开web.config文件 <trace> 节的writeToDiagnosticsTrace属性启用这一特性,
如下所示:
<trace enabled="true" pageOutput="false"  writeToDiagnosticsTrace="true" />
不过仅设置writeToDiagnosticsTrace属性还不行,还需要给程序注册一个或多个侦听器。
可以通过<system.diagnostics> 节中的<trace>节实现,
例如:
<system.diagnostics>
  <trace autoflush="true">
    <listeners>
      <add name="myListener" 
           type="System.Diagnostics.TextWriterTraceListener" 
           initializeData="c:\myListener.log" />
    </listeners>
  </trace>
</system.diagnostics>
这里有两件事要注意:
第一,只有文本才能通过Write或Warn传递给侦听器,也就是说,侦听器不会存储一个标准的ASP.NET跟踪信息,而仅是跟踪信息块的内容。
第二,你可以编写自定义的侦听器来发送跟踪信息到你选择的介质--例如SQL Server 数据库,你所要做的仅是继承System.Diagnostics.TraceListener并重载一些方法。
然后,
将新类注册到要跟踪的WEB应用程序的web.config文件中。
(更多关于编写自定义TraceListener请查阅msdn.microsoft.com/msdnmag/issues/06/04/CLRInsideOut.)

有一件有趣的事值得注意,ASP.NET 2.0中System.Web.dll新加了一个源自TraceListener的类型WebPageTraceListener,它与writeToDiagnosticsTrace配套使用。
当WebPageTraceListener实例增加到跟踪侦听器集合后,写入 .NET Trace 日志的跟踪消息也将写入ASP.NET Trace日志。

最后,在ASP.NET 2.0中跟踪相关的还有一个新的<deployment>节被增加到 Web configuration 节中。
<deployment retail="true|false" />
当 Retail 为 true 时,ASP.NET 将禁用在配置中定义的某些设置,如跟踪输出、自定义错误和调试能力。
<deployment>节只可以在machine.config中设置。
【译者:本节仅适用于计算机级别和应用程序级别的配置文件。】

Asp.NET的Trace追踪的更多相关文章

  1. 说说asp.net中的异常处理和日志追踪

    关于异常的处理想必大家都了解try{}catch(){}finally{},这里就不再讲了.通过在VS里的"调试"-"异常",在弹出的异常对话框里的Common ...

  2. ASP.NET corrupt assembly “Could not load file or assembly App_Web_*

    以下是从overFlow 复制过来的问题 I've read through many of the other questions posted on the same issue, but I s ...

  3. log4net在Asp.net Mvc中的应用配置与介绍

    log4net在.NET中的地位就不多言语了,此篇文章着重配置.较少介绍使用.因为在网上你可以在网上搜到几十万的文章告诉你怎么用.安装的话也不废话了,很简单.Nuget里搜索一下"log4n ...

  4. SAP 使用SQL Trace(ST05)

    SAP 使用SQL Trace(ST05) SAP R/3 提供标准ABAP SQL 跟踪工具.使用T-Code:ST05 可以进入追踪设定画面:          在Trace Modes 区域中选 ...

  5. SQL Server 扩展事件(Extented Events)从入门到进阶(1)——从SQL Trace到Extented Events

    由于工作需要,决定深入研究SQL Server的扩展事件(Extended Events/xEvents),经过资料搜索,发现国外大牛的系列文章,作为“学习”阶段,我先翻译这系列文章,后续在工作中的心 ...

  6. asp.net一些面试题(转)

    基础知识 什么是面向对象 面向对象OO = 面向对象的分析OOA + 面向对象的设计OOD + 面向对象的编程OOP: 通俗的解释就是万物皆对象,把所有的事物都看作一个个可以独立的对象(单元),它们可 ...

  7. Spring Cloud Sleuth+ZipKin+ELK服务链路追踪(七)

    序言 sleuth是spring cloud的分布式跟踪工具,主要记录链路调用数据,本身只支持内存存储,在业务量大的场景下,为拉提升系统性能也可通过http传输数据,也可换做rabbit或者kafka ...

  8. 开源分布式追踪系统 — Jaeger介绍

    目录 一.Jaeger是什么 二.Jaeger架构 1. 术语 2. 架构图 三.关于采样率 四.部署与实践 一.Jaeger是什么 Uber开发的一个受Dapper和Zipkin启发的分布式跟踪系统 ...

  9. [业界方案] 用SOFATracer学习分布式追踪系统Opentracing

    [业界方案] 用SOFATracer学习分布式追踪系统Opentracing 目录 [业界方案] 用SOFATracer学习分布式追踪系统Opentracing 0x00 摘要 0x01 缘由 &am ...

随机推荐

  1. <诗经>的由来

    <人间词话七讲> 第一讲 那是一个把各地的歌谣都编辑在一起的collection. 而且, 它被编辑的时候有一个目的, 在周朝的时候有采诗之官, 他们采集各地的歌谣, 以观民风, 用来给周 ...

  2. java-汉字转化拼音(纯java)

    1.转换所有的拼音 import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Set; public cl ...

  3. Spring Security3学习实例

    Spring Security是什么? Spring Security,这是一种基于Spring AOP和Servlet过滤器的安全框架.它提供全面的安全性解决方案,同时在Web请求级和方法调用级处理 ...

  4. fastq to tasta using linux shell script

    #!/bin/bash usage() { echo " "; echo "############################################### ...

  5. BZOJ 1123: [POI2008]BLO

    1123: [POI2008]BLO Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1030  Solved: 440[Submit][Status] ...

  6. 浅析VO、DTO、DO、PO的概念、区别和用处

    上一篇文章作为一个引子,说明了领域驱动设计的优势,从本篇文章开始,笔者将会结合自己的实际经验,谈及领域驱动设计的应用.本篇文章主要讨论一下我们经常会用到的一些对象:VO.DTO.DO和PO. 由于不同 ...

  7. 【GCJ2008E】日程表 最小割

    Google Code Jam 2008 E 日程表 [题目描述] 热情的选手Sphinny正在看新一年的日程表,并发现已经安排了很多编 程竞赛.她将这一年的每一天都用以下三种方式之一在日程表上打标记 ...

  8. phpize报cannot find autoconf

    突然想往php种增加个模块,可是又不想重新编译php,因为真的比较费时间. phpize就可以解决这个问题. 遇到的问题: Configuring for: PHP Api Version: Zend ...

  9. HTTP 长连接和短连接

    1. HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接.HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议.IP协议主要解决网络路由和寻址问 ...

  10. 分布式ID生成器

    最近会写一篇分布式的ID生成器的文章,先占位.借鉴Mongodb的ObjectId的生成: 4byte时间戳 + 3byte机器标识 + 2byte PID + 3byte自增id 简单代码: imp ...