欢迎来到天天文库
浏览记录
ID:37527927
大小:670.93 KB
页数:21页
时间:2019-05-24
《控制 Windows Azure 中的日志记录与跟踪》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、云诊断控制WindowsAzure中的日志记录与跟踪MikeKelly下载代码示例与许多程序员一样,我在刚刚开始编写代码时,使用print语句进行调试。我不知道如何使用调试器,而print语句虽然简陋,却可以作为一种有效的方式用来查看程序在运行时的情况。后来,我学会了使用真正的调试器,而不再使用print语句作为调试工具。很快,我开始编写在服务器上运行的代码。我发现这些print语句现在被用于更为复杂的“日志记录与跟踪”,而日志记录与跟踪是任何编写服务器应用程序的程序员的基本技术。即使您能够将调试器与生产服务器应用程序相连(这通常无法实现,因为用来托管应用程序的计算机
2、上存在一定的安全限制),也很难通过传统的调试器来揭示服务器应用程序所遇到的问题类型。许多服务器应用程序都是分布式的,运行在多台计算机上,因此对一台计算机上发生的情况进行调试,并不总是能诊断出真正的问题。此外,服务器应用程序经常是在某位操作人员的控制下运行,操作人员不了解如何使用传统的调试器,而每次遇到问题都找来开发人员并不可取或者不切实际。在本文中,我将介绍一些用于服务器应用程序的基本的日志记录、跟踪和调试技术。然后,将深入介绍如何在WindowsAzure项目中利用这些技术。在此期间,您会看到如何对一些实际的应用程序执行日志记录和跟踪,并且我会介绍如何使用Windo
3、wsPowerShell来管理针对运行中的服务的诊断。日志记录策略理想情况下,任何服务器应用程序(几乎所有Web应用程序,包括运行在WindowsAzure下的应用程序)都应该在一开始就设计好日志记录和跟踪策略。日志记录信息应该足够可靠,能够描述每个组件中发生的几乎每一件事。但是,就像我最早在程序中添加的那些print语句会产生大量输出一样,日志记录也会产生大量输出。因此,设计优良的日志记录和跟踪需要包含一些方法,用来调整任意组件的日志记录的类型和容量。这就使操作人员和开发人员能够关注某个表现不正常的组件,甚至可能是某台计算机,以便获得更详细的信息来准确了解其中发生的
4、情况,而不会在日志中生成大量无用信息,这些信息会分散注意力,甚至可能大大降低应用程序的性能。此外,由于服务器应用程序通常都是分布式应用程序,因此必须从多台计算机(可能处于不同的应用程序角色)收集信息并进行汇总,以便全面了解发生特定问题时的情况。因此,非常重要的一点是,利用某种方法来识别通过计算机的事务线程,这样就可以汇总相关的事实信息。WindowsAzure中提供的日志记录在社区技术预览(CTP)发行期间已经成熟。早期的日志记录并不比print语句复杂很多,可作为WindowsAzure表存储空间中的文本来捕获。从PDC09版开始,WindowsAzure开始提供一
5、套功能更加全面的日志记录与跟踪基础结构,这套基础结构基于Windows事件跟踪(ETW)框架。此ETW框架在ASP.NET中是通过System.Diagnostics命名空间中的类来支持的。Microsoft.WindowsAzure.Diagnostics命名空间继承并扩展了标准的System.Diagnostics类,从而能够使用System.Diagnostics作为WindowsAzure环境中的日志记录框架。图1显示了WindowsAzure诊断如何实现ETW。图1WindowsAzure诊断的高度概览ETW提供了一个模型,在此模型中可以将代码记录到一个或多
6、个TraceSource。每个源中允许的日志记录级别是由SourceSwitch控制的。这些源将依次连接到一个或多个使用者,使用者会通过各种方法来永久保存日志记录信息。WindowsAzure提供了一种标准的使用者或侦听器,用来将您生成的日志记录信息永久保存到WindowsAzure表存储空间或Blob存储空间。如果您希望利用事件数据来完成其他的任务,则可以自行编写使用者,或者也可以使用现成的使用者(但有些使用者必须经过修改才能在WindowsAzure环境中使用)。ETW框架为每个事件都关联了一个TraceEventType,如图2所示。前五个严重程度行是最常用的值
7、,它们指出了跟踪输出的相对重要程度。请注意,WindowsCommunicationFoundation(WCF)将使用“暂停”、“继续”和“转移”这几个类型。图2跟踪事件类型跟踪事件类型值含义关键0x0001严重错误或应用程序崩溃错误0x0002可修复的错误警告0x0004不严重的问题,但可能意味着会发生更严重的问题信息0x0008提示性信息详细0x0010调试跟踪(例如详细的执行流程信息、参数等等)开始0x0100开始某项逻辑操作停止0x0200停止某项逻辑操作暂停0x0400暂停某项逻辑操作继续0x0800继续某项逻辑操作转移0x1000转移到
此文档下载收益归作者所有