【发布时间】:2015-09-16 13:15:30
【问题描述】:
我正在使用 System.Diagnostics System.ServiceModel.MessageLogging 为 WCF Web 服务记录消息,配置如下。我扩展了
TraceListener 类为:
public class FormattedTraceListener : TraceListener
{
static readonly Logger logger = new Logger();
public FormattedTraceListener()
: base(string.Empty)
{
}
public override void TraceData(TraceEventCache eventCache,String source,TraceEventType eventType,**Int32 id,**Object data)
{
//....
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging" >
<listeners>
<add name="pretty" />
<remove name="Default"/>
</listeners>
</source>
</sources>
<sharedListeners>
<add name="pretty" lockItem="true" type="LoggingTest.FormattedXmlWriterTraceListener,LoggingTest" />
</sharedListeners>
<trace autoflush="true" indentsize="4">
</trace>
</system.diagnostics>
....
<diagnostics >
<messageLogging
logEntireMessage="true"
logMalformedMessages="false"
logMessagesAtServiceLevel="true"
logMessagesAtTransportLevel="false"
maxMessagesToLog="-1"
maxSizeOfMessageToLog="134217728">
<filters >
<add xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">/s:Envelope</add>
<add xmlns:s="http://www.w3.org/2003/05/soap-envelope">/s:Envelope</add>
</filters>
</messageLogging>
<endToEndTracing propagateActivity="true" activityTracing="true" messageFlowTracing="true" />
</diagnostics>
</system.serviceModel>
TraceData 方法为每个服务调用触发两次(用于请求和响应)。
但是,当方法被命中时,id 参数始终为 0。
我需要一个唯一的记录文本来匹配请求和响应日志。我该如何指定?
【问题讨论】: