代码改变世界

WCF 第九章 诊断 消息日志

2011-02-15 13:44  DanielWise  阅读(2007)  评论(0编辑  收藏  举报

跟踪用来记录一个分布式应用的多个组件的流和独立动作。另外一个特性,消息日志,用来记录从客户端/服务端或者到客户端/服务端的消息内容。消息日志可以配置为在服务端捕捉消息,在传输层记录那些不正确的消息。通过消息日志捕捉的数据对很多情况都是有用的,从诊断到创建审计跟踪服务都可以使用。

开启消息日志

和跟踪一样,消息日志是基于System.Diagnostics而且默认是关闭的。它可以首先通过System.ServiceModel.MessageLogging跟踪源添加一个处理消息的跟踪监听器(例如,XMLWriterTraceListener)开启。

  列表9.3显示了我们的SelfHost应用程序,配置为使用消息日志。

列表9.3 在配置文件中开启消息日志

<system.serviceModel>
<services.../>
<behaviors .../>
<diagnostics>
<messageLogging logEntireMessage="true" logMessagesAtServiceLevel="true"
maxMessagesToLog
="4000" />
</diagnostics>
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Warning, ActivityTracing"
propagateActivity
="true">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
</listeners>
</source>
</sources>
<sharedListeners>
<add initializeData="App_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
name
="tracelog" traceOutputOptions="Timestamp">
<filter type="" />
</add>
</sharedListeners>
</system.diagnostics>

  <system.diagnostics>部分看起来与用来开启跟踪的功能类似。我们已经使用System.ServiceModel.MessageLogging添加了一个源,通过这个结构消息可以用来记录,使用同样的监听类处理源,XMLWriterTraceListener之前用来跟踪。

  然而与跟踪不同,通过在一个<messageLogging>元素中确定MessageLogging源发出的消息格式和冗余,添加到<system.serviceModel><diagnostics>配置节点。表9.2显示了messageLogging选项和它们的目的的详细描述。这些选项的任何一个都可能在配置文件中确定,那些将不会使用默认值的将会在表9.2中显示。

表9.2 messageLogging 选项

选项 默认值 目的
logEntireMessage False 如果是true,消息头和消息体都被记录。如果是false,只有消息头会被记录。
logMalformedMessages False 记录格式不正确的消息。
logMessagesAtServiceLevel False 记录由服务自身接收或者发送的消息。
logMessageAtTransportLevel False 记录编码传输前的消息或者直接在从传输通道接收后。
maxMessagesToLog 10, 000 记录消息的最大数量,超过此数目的日志都会被阻塞。
maxSizeOfMessageToLog 262,144 将要记录的最大消息大小,字节。如果一条消息超过了这个限制,它将会被忽略而且同时会显示一条警告信息。

  注意在传输层记录的消息可能是加密过的,取决于你选择的绑定或者配置选项。