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. Linux查找最近修改的文件

    查找当前目录下.phtml文件中,最近30分钟内修改过的文件. find . -name 查找当前目录下.phtml文件中,最近30分钟内修改过的文件,的详细情况. find . -name -ls ...

  2. Eclipse设置不格式化注释

    Eclipse设置不格式化注释 注释中写点带格式的文字,format后全乱了,解决办法如下: Windows -> Preferces -> java -> Code Style - ...

  3. wow.js使用方法

    近日,在做项目中,需要做到滚动条滑到某个位置时,才能显示动画,网上查询到有个wow.js可以达到要求,现在把使用方法做如下总结: wow.js演示地址 wow.js的github地址 使用方法真是超简 ...

  4. (转)CSS的Sprites技术

    Css Sprites 技术逐渐流行,各大网站上都可以看到它的身影. 但从本质上,Css Sprites 只是 Css 技术的一个使用小窍门,初学者也能快速上手. Css Sprites 简单解释: ...

  5. 【poj1177】 Picture

    http://poj.org/problem?id=1177 (题目链接) 题意 求矩形周长并. Solution 转自:http://www.cnblogs.com/Booble/archive/2 ...

  6. 前端打包/自动化构建工具:gulp

    glup可以进行打包,并且可以实现类似/script/test-adsf123.js或者/script/test.js?v=asdf123 参考: http://www.ydcss.com/archi ...

  7. Linux su和sudo命令的区别,并获得root权限

    su(superuser) su表示切换用户,如: 输入:su命令后回车表示切换当前的用户到root用户,或者: 输入:su - root(或者其他用户名)这里加了"-"后表示也切 ...

  8. windows核心编程读后感(待续)

    自从大一读那本超厚的C程序设计以后,从来没有像这样慢慢地读一本书了.windows核心这本书足足看了2个多星期.一张张慢慢看,做笔记.感觉学到了很多基础的知识,关于内核方面的没有啥可以做实验的,都在看 ...

  9. 数组、ArraryList和List三者的区别

    在C#中数组,ArrayList,List都能够存储一组对象,那么这三者到底有什么样的区别呢. 数组 数组在C#中最早出现的.在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单. ...

  10. Android开发环境搭建中的一些小问题记录

    1.由于市场上大多数教程是基于Eclipse,而AndroidStudio显然是大势所趋,所有我在电脑上同时搭建了两个IDE,直接在官网下载AndroidStudio比较好,因为SDK,AVD都集成了 ...