Asp.NET的Trace追踪

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中设置。
【译者:本节仅适用于计算机级别和应用程序级别的配置文件。】

时间: 2024-10-05 21:41:29

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

SkyWalking+Asp.Net Core 分布式追踪系统

SkyWalking 是一套(APM)分布式追踪系统,SkyWalking提供了很多数据存储列如:Mysql,H2,Elasticsearch7 等,我这里用的是Elasticsearch7 ,SkyWalking默认H2,H2是内存数据库,数据文件一旦损坏oapservice就启动不了,所以我这里用的是Elasticsearch7 . SkyWalking下载地址 Elasticsearch下载地址 SkyWalking 安装的环境要求 CentOS7 JDK8+ Elasticsearch7

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

关于异常的处理想必大家都了解try{}catch(){}finally{},这里就不再讲了.通过在VS里的"调试"-"异常",在弹出的异常对话框里的Common Language Runtime Exceptions栏里是.NET中的异常层次结构. 自定义异常: 如果系统提供的异常类已经不能够满足应用系统开发的需要,或者开发团队需要一套自定义异常处理机制,可以创建自定义的异常类.自定义异常类应该直接过间接地继承自ApplicationException类,并且其最好

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 still do not understand the cause and how to prevent it from happening. In my case, this happens on the production server. I get the same error that ha

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

log4net在.NET中的地位就不多言语了,此篇文章着重配置.较少介绍使用.因为在网上你可以在网上搜到几十万的文章告诉你怎么用.安装的话也不废话了,很简单.Nuget里搜索一下"log4net"安装即可. 一.配置与配置详解 你可以选择在Web.Config里配置也可以在单独的xml文件里配置或是其他方式.我这里是使用单独的xml文件配置. A.在Web.Config里配置 需要注意的是在configuration节点下添加configSections节点 节点内添加名为log4ne

asp.net一些面试题(转)

基础知识 什么是面向对象 面向对象OO = 面向对象的分析OOA + 面向对象的设计OOD + 面向对象的编程OOP: 通俗的解释就是万物皆对象,把所有的事物都看作一个个可以独立的对象(单元),它们可以自己完成自己的功能,而不是像C那样分成一个个函数: 现在纯正的OO语言主要是java和C#,C++也支持OO,C是面向过程的. 阐述面向接口.面向对象.面向方面编程的区别 面向对象不好解释,可以理解为以一切元素都是对象,在设计时以对象为单位,考虑它的属性及方法.设计中采用了封装.继承.抽象的手法

Default Trace

sql server trace 是一个轻量级的追踪工具,对追踪数据库的行为很有用,因此,sql server内置一个trace(default trace). 1,sql server 内置Default Trace,Default Trace的TraceID是1,默认是开启的,可以通过sys.configurations 进行查看 select * from sys.configurations where configuration_id=1568 字段 value=1,表示Default

转:使用log4net完成程序异常日志记录(使用SQLite数据库记录和普通文本记录)

http://www.cnblogs.com/kyo-yo/archive/2010/06/11/use-log4net-to-log-exception.html 在前端时间开发的时候由于需要将异常保存到数据库中,所以就到网上搜了下专门的日志记录工具,一搜果然很多,比如:log4net,NLog,EntLib Logging等等,但是还是log4net名气最大,所以就下载下来试用了一番,果然很方便,其涵盖了所有常用的日志记录方式具体的可以看下表: AdoNetAppender 将日志记录到数据

02http协议及httpd基础

http协议及httpd基础 --以下内容摘自马哥教育课堂 HTTP/2.0 目前没有大规模应用 可以查看相关rfc文档 一次完整的http工作过程浅析: (1)处理连接 处理客户端请求--接收/拒绝请求 tcp连接怎么建立--三次握手 tcp连接怎么断开--四次断开 tcp连接有两种,持久连接和非持久连接 tcp连接建立以后,请求第一个资源完成后不会立刻断开,可以基于该连接请求第二个资源,这样可以避免频繁的创建和断开连接 而如果连接建立以后长时间没有传输web资源则会浪费服务器的连接资源,因为

漫谈HTTP(上)

HTTP协议: 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法.1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基.Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联