Simple Steps to Enable Tracing in WCF






4.83/5 (4 votes)
Simple steps to enable tracing in WCF
Introduction
Tracing mechanism in Windows Communication Foundation is based on the classes that reside in System.Diagnostic
namespace. Important classes are Trace
, TraceSource
and TraceListener
.
Following are the steps to enable tracing in WCF:
- Configuring WCF to emit tracing information/Define Trace Source, we have the following options:
System.ServiceModel
System.ServiceModel.MessageLogging
System.ServiceModel.IdentityModel
System.ServiceModel.Activation
System.Runtime.Serialization
System.IO.Log
Cardspace
- Setting Tracing Level, we have the following available options, we need to set this tracing level to available options other than default "
Off
": Off
Critical
Error
Warning
Information
Verbose
ActivityTracing
All
- Configuring a trace listener:
For configuring a trace listener, we will add the following to config file.
<listeners> <add name="messages" type="System.Diagnostics.XmlWriterTraceListener" initializeData="d:\logs\messages.svclog" /> </listeners>
- Enabling message logging:
<system.serviceModel> <diagnostics> <messageLogging logEntireMessage="true" logMalformedMessages="false" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="false" maxMessagesToLog="3000" maxSizeOfMessageToLog="2000"/> </diagnostics> </system.serviceModel>
logEntireMessage
: By default, only the message header is logged but if we set it totrue
, the entire message including message header as well as body will be logged.logMalformedMessages
: This option logs messages that are rejected by WCF stack at any stage known as malformed messages.logMessagesAtServiceLevel
: Messages those are about to enter or leave user.logMessagesAtTransportLevel
: Messages those are about to encode or decode.maxMessagesToLog
: Maximum quota for messages. Default value is10000
.maxSizeOfMessageToLog
: Message size in bytes.
In configuration file, we will define a source to enable this configuration as follows:
<source name="System.ServiceModel.MessageLogging">
In configuration file, we can choose the above values for switchValue
attribute as follows:
<source name="System.ServiceModel.MessageLogging"
switchValue="Information">
Finally, putting all this together, the configuration file will appear like this:
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="messagelistener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="d:\logs\myMessages.svclog"></add>
</listeners>
</source>
</sources>
</system.diagnostics>
<system.serviceModel>
<diagnostics>
<messageLogging logEntireMessage="true"
logMessagesAtServiceLevel="false"
logMessagesAtTransportLevel="false"
logMalformedMessages="true"
maxMessagesToLog="5000"
maxSizeOfMessageToLog="2000">
</messageLogging>
</diagnostics>
</system.serviceModel>
Note: In this case, information will be buffered and not published to file automatically. So, we can set the autoflush
property of the trace under sources as follows:
<trace autoflush ="true" />