WCF 第九章 诊断 消息日志

本文介绍了如何在分布式应用中配置消息日志和跟踪功能,包括记录消息内容、错误消息和跟踪服务动作的方法。通过配置文件可以开启消息日志,记录服务级别和传输级别的消息,这对于诊断和服务审计至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

开启消息日志

和跟踪一样,消息日志是基于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 选项

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

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

资源下载链接为: https://pan.quark.cn/s/f989b9092fc5 HttpServletRequestWrapper 是 Java Servlet API 中的一个工具类,位于 javax.servlet.http 包中,用于对 HttpServletRequest 对象进行封装,从而在 Web 应用中实现对 HTTP 请求的拦截、修改或增强等功能。通过继承该类并覆盖相关方法,开发者可以轻松地自定义请求处理逻辑,例如修改请求参数、添加请求头、记录日志等。 参数过滤:在请求到达处理器之前,可以对请求参数进行检查或修改,例如去除 URL 编码、过滤敏感信息或进行安全检查。 请求头操作:可以修改或添加请求头,比如设置自定义的 Content-Type 或添加认证信息。 请求属性扩展:在原始请求的基础上添加自定义属性,供后续处理使用。 日志记录:在处理请求前记录请求信息,如 URL、参数、请求头等,便于调试和监控。 跨域支持:通过添加 CORS 相关的响应头,允许来自不同源的请求。 HttpServletRequestWrapper 通过继承 HttpServletRequest 接口并重写其方法来实现功能。开发者可以在重写的方法中添加自定义逻辑,例如在获取参数时进行过滤,或在读取请求体时进行解密。当调用这些方法时,实际上是调用了包装器中的方法,从而实现了对原始请求的修改或增强。 以下是一个简单的示例,展示如何创建一个用于过滤请求参数的包装器: 在 doFilter 方法中,可以使用 CustomRequestWrapper 包装原始请求: 这样,每当调用 getParameterValues 方法时,都会先经过自定义的过滤逻辑。 HttpServletRequestWrapper 是 Java Web 开发中一个强大的工具,它提供了灵活的扩展性,允许开发者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值