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中设置。
【译者:本节仅适用于计算机级别和应用程序级别的配置文件。】
Asp.NET的Trace追踪的更多相关文章
- 说说asp.net中的异常处理和日志追踪
关于异常的处理想必大家都了解try{}catch(){}finally{},这里就不再讲了.通过在VS里的"调试"-"异常",在弹出的异常对话框里的Common ...
- 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 ...
- log4net在Asp.net Mvc中的应用配置与介绍
log4net在.NET中的地位就不多言语了,此篇文章着重配置.较少介绍使用.因为在网上你可以在网上搜到几十万的文章告诉你怎么用.安装的话也不废话了,很简单.Nuget里搜索一下"log4n ...
- SAP 使用SQL Trace(ST05)
SAP 使用SQL Trace(ST05) SAP R/3 提供标准ABAP SQL 跟踪工具.使用T-Code:ST05 可以进入追踪设定画面: 在Trace Modes 区域中选 ...
- SQL Server 扩展事件(Extented Events)从入门到进阶(1)——从SQL Trace到Extented Events
由于工作需要,决定深入研究SQL Server的扩展事件(Extended Events/xEvents),经过资料搜索,发现国外大牛的系列文章,作为“学习”阶段,我先翻译这系列文章,后续在工作中的心 ...
- asp.net一些面试题(转)
基础知识 什么是面向对象 面向对象OO = 面向对象的分析OOA + 面向对象的设计OOD + 面向对象的编程OOP: 通俗的解释就是万物皆对象,把所有的事物都看作一个个可以独立的对象(单元),它们可 ...
- Spring Cloud Sleuth+ZipKin+ELK服务链路追踪(七)
序言 sleuth是spring cloud的分布式跟踪工具,主要记录链路调用数据,本身只支持内存存储,在业务量大的场景下,为拉提升系统性能也可通过http传输数据,也可换做rabbit或者kafka ...
- 开源分布式追踪系统 — Jaeger介绍
目录 一.Jaeger是什么 二.Jaeger架构 1. 术语 2. 架构图 三.关于采样率 四.部署与实践 一.Jaeger是什么 Uber开发的一个受Dapper和Zipkin启发的分布式跟踪系统 ...
- [业界方案] 用SOFATracer学习分布式追踪系统Opentracing
[业界方案] 用SOFATracer学习分布式追踪系统Opentracing 目录 [业界方案] 用SOFATracer学习分布式追踪系统Opentracing 0x00 摘要 0x01 缘由 &am ...
随机推荐
- 面向对象_python
面向对象_python 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的.类变量定 ...
- JS实现打印功能
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ t ...
- js-关于性能优化的一些学习总结
性能优化的方法有: 1.减少HTTP请求:合并CSS/JS,使用CSS sprite等 2.压缩CSS/JS/图片 3.样式表放头部,JS放body底部:JS放在head中,将会等到js全部下载解析和 ...
- 深入理解Java多态机制
从字节码层面来看,Java中的所有方法调用,最终无外乎转换为如下几条调用指令. invokestatic: 调用静态方法. invokespecial: 调用实例构造器<init>方法,私 ...
- Namenode主节点停止报错 Error: flush failed for required journal
主节点间歇性报错其他没有问题 ,SNN的NN没有问题,相关的journalNode也都在,就是主节点的NN会停止. 查看hadoop主节点的NN日志. 2016-11-21 22:36:40,908 ...
- Bzoj4300 绝世好题
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1325 Solved: 722 Description 给定一个长度为n的数列ai,求ai的子序列bi ...
- Android——旋转屏幕导致Activity重建解决方法
Android开发文档上专门有一小节解释这个问题.简单来说,Activity是负责与用户交互的最主要机制,任何“设置”(Configuration)的改变都可能对Activity的界面造成影响,这时系 ...
- nginx ssl证书安装配置
原理图: - 客户端生成一个随机数 random-client,传到服务器端(Say Hello) - 服务器端生成一个随机数 random-server,和着公钥,一起回馈给客户端(I got it ...
- C语言实现penna模型
一年前写的代码,偶然翻出来.发现自己当时水平还不赖吗. # include <stdio.h> # include <stdlib.h> # include <time. ...
- python 生成器和递归
生成器 1.定义 问题:python会把对象放到内存中,我们每次定义变量.列表等都会在内存中占用对应的地址块,所以当内存容量一定时,列表的容量会受到内存的限制,而且假如我们创建了一个包含200万个元素 ...