trace与代码跟踪服务
首先开篇引用《MVC2 2 in action》里面一段关于这个跟踪服务的话
When you called Trace.Write() in Web Forms, you were interacting with the Trace- Context class. This exists on your ViewPage in ASP.NET MVC, but this isn't where you would want to write tracing statements. By the time you've passed the baton over to the view, there's no logic there that you'd need to trace. Instead, you'd like to trace the logic embedded in your controllers. You might try to leverage the TraceContext class in your controller, but these statements won't ever make their way to the list of messages in the trace log (on your page or on Trace.axd). Instead, you can use System.Diagnostics.Trace and set up your own TraceListeners to inspect the activity in your controllers. Alternatively, you can leverage a more mature logging framework such as log4net or NLog:
You debug ASP.NET MVC applications just as you would any .NET application. Tracing, however, doesn't offer as much for MVC. Instead, you can lean on the built-in TraceListeners in .NET, or utilize a good logging library like those mentioned earlier. Another aspect of error logging is health monitoring.
来自 <http://stackoverflow.com/questions/3328678/asp-net-mvc-tracing-issues>
当你在WebForm中调用Trace.Write(),你正在和跟踪上下文的类进行交互。这些跟踪信息存在于你的ASP.NET的ViewPage里面,但这并不是你期望输出跟踪语句的地方。等到你已经把这些信息传递到View的时候,那里并没有你需要的逻辑。反而你想将跟踪逻辑植入到你的Controller里面。你或者尝试在你的Controller里面使用TraceContext,但这些语句从不&*@#@@#(这里不会翻译make their way)以消息列表的形式存在于跟踪日志里面(或者在你的页面或者在Trace.axd)。反而你可以使用System.Diagnostics.Trace来设置你自己的TraceLinteners以观察你的Controller的活动。或者你可以更改使用其他更成熟的框架,例如log4net 或者NLog;
就如你调试.NET 应用程序一样调试ASP.NET MVC应用程序。但是跟踪服务并没有对MVC提供更多支持。你可以依靠.NET内置的TraceListener或者利用上文提到的一些优秀的日志库。异常日志的另一方面的用途就是健康监控。
小弟的英文水平确实不好,大学没过四级。但至少发现Trace最好的应用场景是WebForm里面,在ASP.NET MVC里面最好还是用其他方式了。所以看到这里对跟踪服务没兴趣的同学可以出门转左了。
那继续看下来的同学都是对这个有兴趣的。下面则直接出效果。
在一个ASP.NET WebForm的项目的配置文件中添加以下配置
然后随便访问一个WebForm页面就会看到界面上多了一堆内容
上面这个页面只要多刷几次,跟踪信息就不会存在,因为跟踪记录存储的个数是有限的,默认是10个,可以在web.config/system.web/trace的requestLimit中设置。上面的图我实际上省略来控件树的内容,被跟踪的内容还是不少,至少发现原来就算一个简单的TextBox里面也包含来那么的子控件。下面则列举一下被跟踪的内容
请求详细信息:包含会话 ID,请求的时间,请求编码,请求类型,状态代码,响应编码;
跟踪信息:显示页级事件流。如果创建了自定义跟踪消息,这些消息也将显示在"跟踪信息"部分。
控件树:显示有关在页中创建的 ASP.NET 服务器控件的信息。
会话状态:显示有关存储在会话状态中的值(如果有的话)的信息。
应用程序状态:显示关于存储在应用程序状态中的值(如果有的话)的信息。这就是ApplicationState
Cookie 集合:显示对于每个请求和响应在浏览器与服务器之间传递的 Cookie 的有关信息。该部分既显示持久性 Cookie,也显示会话 Cookie。
标头集合:显示关于请求和响应消息的标头名称/值对(提供关于消息体或所请求的资源的信息)的信息。就是头部信息Header。
窗体集合:显示名称/值对,这些名称值/对显示在 POST 操作(回发)期间的请求中提交的窗体元素值(控件值)。就是往服务器提交表单元素的值。
Querystring 集合:显示服务器相关的环境变量的集合和请求标头信息。
服务器变量:显示服务器相关的环境变量的集合和请求标头信息。
对于<trace>配置节的属性,如下所示
每个属性的作用可以参考MSDN下的文档
https://msdn.microsoft.com/zh-cn/library/6915t83k.aspx
实际上跟踪信息可以通过Trace.axd(跟踪查看器)去查看。跟踪查看器的使用方式是如果应用程序的 URL 为http://localhost/SampleApplication ,请定位到http://localhost/SampleApplication/trace.axd 查看该应用程序的跟踪信息。也就是说当前测试地址是http://localhost:8081,那想进入跟踪查看器查看的话就通过这个URL:http://localhost:8081/trace.axd。
在这里可进入到每个具体的请求,内容就有点类似于前面跟踪信息的截图。只是少了页面的实际内容。就是那几个Label和TextBox。
跟踪信息可以在页面上输出是因为调用了一个叫WebPageTraceListener的类,他是继承TraceListener的一个子类。其余子类如下图
凡是继承了这个类的,都可以通过不同子类对应的实现方式来输出跟踪信息。比如TextWriteRaceLintener它可以把跟踪内容输出到一个txt文件中去。
可以通过这个小例子
在Global.asax中添加代码
通过往跟踪监听器集合中添加两个监听器。
然后在页面代码中调用Trace输出两条跟踪信息
假设不调用这个Flush方法,跟踪信息不会输出到文本中。
在ASP.NET MVC中,同样调用Trace类去记录一些跟踪信息,结果会如何?
单纯在Action方法中添加代码,然后访问对应的URL
结果发现页面上毛都没有。进入跟踪查看器是能发现有一条跟踪信息,进去查看发现对比起WebForm的就少了控件树和页级事件流的跟踪信息,Trace.Write的内容应该在显示跟踪信息一栏中。但是这个并没有出现。由此也证明了对跟踪服务的配置在WebForm和MVC中已有差别。为了能让跟踪信息在页面上显示,需要手动添加一个Listener。即时这样,也只能在跟踪查看器中查看到Trace输出的内容,并不能在原有页面上看到跟踪信息,就是trace配置节的pageOutput已失效。
确实这个跟踪服务到现在来说确实会遭淘汰了,像通过Trace.Write这样输出跟踪信息可以通过写日志的形式取代,查看请求头,Cookie等跟请求相关的可以通过浏览器的开发人员工具去查看。但如果懒得去看按F12去打开开发人员工具和远程到服务器去打开日志文件的,还是可以把这个跟踪服务启用。
最后特别鸣谢china autumn对少部分译文作了校对工作。非常感谢。
参考文章
https://msdn.microsoft.com/zh-cn/library/bb386420.aspx
https://blogs.msdn.microsoft.com/webdev/2013/07/16/tracing-in-asp-net-mvc-razor-views/
http://stackoverflow.com/questions/3328678/asp-net-mvc-tracing-issues
trace与代码跟踪服务的更多相关文章
- openstack学习笔记一 虚拟机启动过程代码跟踪
openstack学习笔记一 虚拟机启动过程代码跟踪 本文主要通过对虚拟机创建过程的代码跟踪.观察虚拟机启动任务状态的变化,来透彻理解openstack各组件之间的作用过程. 当从horizon界面发 ...
- 【转】Microsoft .Net Remoting之Marshal、Disconnect与生命周期以及跟踪服务
Marshal.Disconnect与生命周期以及跟踪服务 一.远程对象的激活 在Remoting中有三种激活方式,一般的实现是通过RemotingServices类的静态方法来完成.工作过程事实上是 ...
- 微服务, 架构, 服务治理, 链路跟踪, 服务发现, 流量控制, Service Mesh
微服务, 架构, 服务治理, 链路跟踪, 服务发现, 流量控制, Service Mesh 微服务架构 本文将介绍微服务架构和相关的组件,介绍他们是什么以及为什么要使用微服务架构和这些组件.本文侧 ...
- AM335x tscadc platform driver 相关代码跟踪
TI AM335x ti am335x_tsc.c 代码跟踪 在kernel 首层目录: 先运行make ARCH=arm tags 这个作用是建立tags文件,只含有arm架构的,利用ctag即可进 ...
- 简单 php 代码跟踪调试实现
简单 php 代码跟踪调试实现 debug_backtrace:生成回溯 debug_print_backtrace:打印回溯 1. debug_backtrace ($options = DEBUG ...
- Babelfish 开源通用代码解析服务
Babelfish 是一个开源的代码解析服务 参考架构 支持的语言 bash go java javascript php ruby c++ typescript 功能 我们可以使用此工具,进行大规模 ...
- 【监控笔记】【1.2】监控事件系列——SQL Trace(默认跟踪与自定义跟踪)
目录: [1.1]概念与使用 [1.2]跟踪的基本操作 --[1.2.1]查看默认跟踪是否在运行 --[1.2.2]开启默认跟踪 --[1.2.3]关闭默认跟踪 --[1.2.4]查看跟踪文件/查看跟 ...
- 服务链路跟踪 && 服务监控
服务链路跟踪 背景 微服务以微出名,在实际的开发过程中,涉及到成百上千个服务,网络请求引起服务之间的调用极其复杂. 当请求不可用或者变慢时,需要及时排查出故障服务点成为了微服务维护的一大难关. 服务链 ...
- Linux 内核高-低端内存设置代码跟踪(ARM构架)
对于ARM中内核如何在启动的时候设置高低端内存的分界线(也是逻辑地址与虚拟地址分界线(虚拟地址)减去那个固定的偏移),这里我稍微引导下(内核分析使用Linux-3.0): 首先定位设置内核虚拟地址起始 ...
随机推荐
- 对改善ABP的一些建议
园子里有不少同学对ABP框架很感兴趣,而且也已经将ABP用在了商用项目中,有些可能还在操练阶段.一般来说,我们使用ABP默认的一些功能已经足够了,但还是有很多人想要自己拓展一些功能而自己实现不了或者说 ...
- ASP.Net MVC开发基础学习笔记:四、校验、AJAX与过滤器
一.校验 — 表单不是你想提想提就能提 1.1 DataAnnotations(数据注解) 位于 System.ComponentModel.DataAnnotations 命名空间中的特性指定对数据 ...
- Javascript分号,加还是不加?
关于这个问题,网上已经有很多人讨论过了,我先说说自己对这个问题的回答:加!(但非必须) 有些人写代码,懒得加分号,除非是迫不得已才勉强放一个分号上去.如果你可以保证你写的代码不出现任何 bug,那当然 ...
- Net作业调度(二) -CrystalQuartz远程管理
Source Code-1.6M 介绍 上篇已经了解Quartz.NET的基本使用方法了.但如果想方便的知道某个作业执行情况,需要暂停,启动等操作行为,这时候就需要个Job管理的界面. 本文介绍Qua ...
- 微软CMS项目 Orchard 所用到的开源项目
研发了Orchard一年左右了,时常遇到瓶颈,总觉得力不从心,其实并不是基础不够,关键还是概念性的东西太多,一会儿这个概念名词,一会那个,关于Orchard的技术文档也的确很少,每次看起来总是焦头烂额 ...
- 在C#代码中应用Log4Net(一)简单使用Log4Net
首先让我们先把Log4Net跑起来,示例代码在文章最后面可以下载 1.先把Log4Net引入到工程中,为了演示方便,我们先建立一个winform程序.在程序的根目录下面,建立一个Libs文件夹,以便存 ...
- SQL Server 变更数据捕获(CDC)
标签:SQL SERVER/MSSQL SERVER/数据库/DBA/字段/对象更改 概述 变更数据捕获用于捕获应用到 SQL Server 表中的插入.更新和删除活动,并以易于使用的关系格式提供这些 ...
- 调试的时候 line not available!
手贱, 不小心修改了一个地方,后面调试代码的时候,总感觉不对.出现: line not available, 总是到不了源码里面,反复部署了N次还是一样, 非常郁闷,... 搞了一两个小时后,后面醒悟 ...
- fir.im Weekly - 如何进行 Android App 性能优化
关于 Android App 的优化,@anly-jun 用 3 个月完成了这一系列文章,从 性能分析工具 到 ANR .Layout .消除卡顿 到 内存优化.内存分析工具大概十五六篇,并对此做一个 ...
- Tips for newbie to read source code
This post is first posted on my WeChat public account: GeekArtT Reading source code is always one bi ...