E' da un paio di giorni che sto cercando di capire la configurazione migliore per abilitare il log dei messaggi di alcuni servizi WCF.
Ricordo per chi non lo sapesse che WCF permette di abilitare il log e il trace di tutto ciò che avviene direttamente dall'app.config dell'applicazione che utilizza il servizio.
Per ulteriori informazioni guardate su MSDN la guida per la configurazione del log dei messaggi e la configurazione del tracing del servizio
La seguente configurazione permette di loggare gli errori generati da wcf (lo fa con il primo source System.ServiceModel) e tutti i messaggi che il client e il servizio si scambiano (tramite il secondo source System.ServiceModel.MessageLogging). lasciando stare tutto quel log (che per il mio caso era inutile) definito tracing.
La configurazione migliore è la seguente:
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Error" propagateActivity="true">
<listeners>
<add name="xmlTrace" />
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging" switchValue="Verbose">
<listeners>
<add name="xmlTrace" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="xmlTrace" type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:TracesMyTrace2.svclog" />
</sharedListeners>
<trace autoflush="true" />
</system.diagnostics>
Inoltre è da aggiungere anche la parte seguente sotto il nodo <system.serviceModel> questo definisce che tipi di messaggi loggare, la grandezza e la quantità:
<diagnostics>
<messageLogging maxMessagesToLog="100"
logEntireMessage="true"
logMessagesAtServiceLevel="true"
logMalformedMessages="true"
logMessagesAtTransportLevel="true">
</messageLogging>
</diagnostics>
Attenzione: Se per qualche motivo i messaggi non vengono loggati o avete un comportamento strano da parte del servizio cambiate switchValue="Verbose" anche per la parte di tracing ossia nel Source System.ServiceModel questo vi permetterà di vedere tutto quello che succede nel servizio. Vi consiglio comunque di disabilitare il livello verbose dopo che avete trovato il problema per evitare di avere dei log esagerati ed inutili.