trace与代码跟踪服务

2024-06-27 04:11:36

首先开篇引用《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://blog.51cto.com/zhanglida66/1920874

trace与代码跟踪服务相关推荐

  1. 用Go重构WEB请求分析跟踪服务

    在Skroutz,我们严重依赖网页分析来进行关键业务和技术决策. 从网页浏览收集的数据可以用于计算商店产品转换率,提取商业智能,制定个性化建议和预测的原材料. 随着访问流量在过去几年中稳步增长,我们面 ...

  2. Microsoft .Net Remoting系列专题之二:Marshal、Disconnect与生命周期以及跟踪服务

    Microsoft .Net Remoting系列专题之二 一.远程对象的激活 在Remoting中有三种激活方式,一般的实现是通过RemotingServices类的静态方法来完成.工作过程事实上是 ...

  3. 完成了WF工作流持久化和对持久化介质数据的加载, 但是仅仅用持久化,不能够保存工作流当前的执行状态,需要跟踪服务支持,怎样使用Tracing 服务呢?...

    配置持久化服务(3步): 1.创建和配置持久化数据库 2.添加SQLStatePersistanceService实例对象到WorkFlow运行时中; 3.保存工作流实例状态. 将工作流持久化服务添加 ...

  4. 转:WF中的跟踪服务(1):Sql跟踪数据库表,视图,存储过程等相关说明

    使用WF 中的SqlTrackingService 跟踪服务,我们可以记录有关工作流及其关联活动的跟踪信息到Sql Server数据库库中.SqlTrackingQuery 类提供对包含在跟踪数据库中 ...

  5. 分布式链接跟踪服务_微服务世界中的分布式跟踪

    分布式链接跟踪服务 微服务已成为未开发应用程序的默认选择. 毕竟,从业人员认为,微服务提供了完全数字化转型所需的解耦类型,从而使各个团队的创新速度比以往任何时候都快. 微服务只不过是常规的分布式系统, ...

  6. 邮件群发工具的编写(四)邮件跟踪服务

    不管黑猫白猫,抓得到老鼠的就是好猫 上一篇,邮件群发工具的编写(三)邮件发送的几种方式 中,我们谈到了发送邮件.这一篇,我们讲讲邮件跟踪服务器的创建 邮件群发出去之后,很多朋友都想知道群发的效果.这就 ...

  7. 被解救的代码 - 代码即服务时代来了!

    作者 | 王铎(都铎) 来源 | Serverless 公众号 人类对自由的追求从未停止,我们用战斗获得民族自由,我们用代码获得双手自由,同时代码作为服务器的奴隶,也开始蠢蠢欲动,革命已经开始,当代码 ...

  8. 安卓代码跟踪方式学习笔记

    一.代码跟踪的介绍&使用工具 代码跟踪常用于调试程序中,跟踪并了解程序的执行轨迹和执行逻辑.这样来说,对Java这样的高级语言来说,我们容易理解也容易调试.但是像一些低级语言,例如ASM.Sm ...

  9. 后端代码之服务端 - MongoDB数据库的连接、重启测试与(Studio3T)查看 - 讲解篇

    文章目录 前言 一. 在项目中安装Mongoose中间件 二. 安装完毕,新建一个路由作为测试路由 通过WebStorm软件,打开项目,编辑index.js文件: 三.重启服务,浏览器查看:测试连接是 ...

最新文章

  1. 操作系统学习:Linux0.12文件异步IO
  2. mysql load data on duplicate_带有ON DUPLICATE KEY UPDATE的MySQL LOAD DATA INFILE
  3. 高小明的云平台搭建系列之一——物理机装 ESXi 5.0
  4. [unity3d]导出安卓版设置
  5. QT的QRegExpValidator类的使用
  6. selenium基础框架的封装(Python版)这篇帖子在百度关键词搜索的第一位了,有图为证,开心!...
  7. HDU3662(求三维凸包表面的多边形个数,表面三角形个数,体积,表面积,凸包重心,凸包中点到面的距离)
  8. postgreSql 常用操作总结
  9. 二叉排序树(搜索树BST)-详解结点的删除
  10. CSS之不使用Media Queries的自适应CSS
  11. Java数组队列ArrayQueue
  12. java线程三种创建方式与线程池的应用
  13. 二维数据的分形维数分析(C++实现)
  14. 对链表进行插入排序。从第一个元素开始,该链表可以被认为已经部分排序。每次迭代时,从输入数据中移除一个元素,并原地将其插入到已排好序的链表中。
  15. 精读《磁贴布局 - 功能分析》
  16. 计算机组成原理学习笔记(7.I/O系统)
  17. 广告图片自动轮播控件
  18. Excel-VBA应用(5):设计问卷及数据回收统计系统
  19. ubuntu 开机启动 ibus 输入法
  20. 高级网络管理员必学知识

热门文章

  1. flatform installer web 安装php_Windows server 2019 安装 IIS PHP 环境无标题笔记
  2. python 函数重载_在Python中实现函数重载,60%的人都不会
  3. java文档注释生产api没有注释_一个神奇的没有springboot注释的api文档生成器---JApiDocs...
  4. python random函数sample_Python random.seed() random.sample()函数使用
  5. python如何让图片镜像翻转_98后常春藤学霸林之秋,一作拿下CVPR最佳论文提名,首次挑战图片翻转不变性假设...
  6. java程序设计基础29_java程序设计基础实验29
  7. 三年级学生计算机学情分析,三年级上学期学生学情分析
  8. 长春理工计算机学院保研外校,长春理工大学计算机科学技术学院(专业学位)软件工程保研...
  9. 超级计算机预测南方下雪,今冬南方就不下雪了?超级计算机:可能性确实在减小,但还要观察...
  10. java 面试题三十三 子类父类方法执行顺序的问题