Konfigurera meddelandeloggning
Det här avsnittet beskriver hur du kan konfigurera meddelandeloggning för olika scenarier.
Aktivera meddelandeloggning
Windows Communication Foundation (WCF) loggar inte meddelanden som standard. Om du vill aktivera meddelandeloggning måste du lägga till en spårningslyssnare System.ServiceModel.MessageLogging
i spårningskällan och ange attribut för elementet <messagelogging>
i konfigurationsfilen.
I följande exempel visas hur du aktiverar loggning och anger ytterligare alternativ.
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="messages"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\logs\messages.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
<system.serviceModel>
<diagnostics>
<messageLogging
logEntireMessage="true"
logMalformedMessages="false"
logMessagesAtServiceLevel="true"
logMessagesAtTransportLevel="false"
maxMessagesToLog="3000"
maxSizeOfMessageToLog="2000"/>
</diagnostics>
</system.serviceModel>
Mer information om inställningar för meddelandeloggning finns i Rekommenderade Inställningar för spårning och meddelandeloggning.
Du kan använda add
för att ange namnet och typen av lyssnare som du vill använda. I exempelkonfigurationen heter lyssnaren "meddelanden" och lägger till standardspårningslyssnaren för .NET Framework (System.Diagnostics.XmlWriterTraceListener
) som den typ som ska användas. Om du använder System.Diagnostics.XmlWriterTraceListener
måste du ange utdatafilens plats och namn i konfigurationsfilen. Detta görs genom att ange initializeData
namnet på loggfilen. Annars utlöser systemet ett undantag. Du kan också implementera en anpassad lyssnare som genererar loggar till en standardfil.
Kommentar
Eftersom meddelandeloggning har åtkomst till diskutrymme bör du begränsa antalet meddelanden som skrivs till disk för en viss tjänst. När meddelandegränsen har nåtts skapas en spårning på informationsnivå och alla aktiviteter för meddelandeloggning stoppas.
Loggningsnivån samt de ytterligare alternativen beskrivs i avsnittet Loggningsnivå och Alternativ.
Attributet switchValue
för en source
är endast giltigt för spårning. Om du anger ett switchValue
attribut för spårningskällan System.ServiceModel.MessageLogging
på följande sätt har det ingen effekt.
<source name="System.ServiceModel.MessageLogging" switchValue="Verbose">
</source>
Om du vill inaktivera spårningskällan bör du använda elementets logMessagesAtServiceLevel
messageLogging
attribut , logMalformedMessages
och logMessagesAtTransportLevel
i stället. Du bör ange alla dessa attribut till false
. Detta kan göras med hjälp av konfigurationsfilen i föregående kodexempel, via gränssnittet för konfigurationsredigeraren eller med hjälp av WMI. Mer information om verktyget Konfigurationsredigeraren finns i Konfigurationsredigerarens verktyg (SvcConfigEditor.exe). Mer information om WMI finns i Använda Windows Management Instrumentation för diagnostik.
Loggningsnivåer och -alternativ
För inkommande meddelanden sker loggning omedelbart efter att meddelandet har skapats, omedelbart innan meddelandet kommer till användarkoden på tjänstnivå och när felaktiga meddelanden identifieras.
För utgående meddelanden sker loggning omedelbart efter att meddelandet lämnar användarkoden och omedelbart innan meddelandet går på tråden.
WCF loggar meddelanden på två olika nivåer, tjänst och transport. Felaktiga meddelanden loggas också. De tre kategorierna är oberoende av varandra och kan aktiveras separat i konfigurationen.
Du kan styra loggningsnivån genom att ange elementets logMessagesAtServiceLevel
messageLogging
attribut , logMalformedMessages
och logMessagesAtTransportLevel
.
Servicenivå
Meddelanden som loggas på det här lagret är på väg att ange (vid mottagning) eller lämna (vid sändning) användarkod. Om filter har definierats loggas endast meddelanden som matchar filtren. Annars loggas alla meddelanden på tjänstnivå. Infrastrukturmeddelanden (transaktioner, peer-kanal och säkerhet) loggas också på den här nivån, förutom reliable messaging-meddelanden. På strömmade meddelanden loggas endast rubrikerna. Dessutom loggas säkra meddelanden på den här nivån.
Transportnivå
Meddelanden som loggas på det här lagret är redo att kodas eller avkodas för eller efter transport på tråden. Om filter har definierats loggas endast meddelanden som matchar filtren. Annars loggas alla meddelanden på transportlagret. Alla infrastrukturmeddelanden loggas på det här lagret, inklusive tillförlitliga meddelandemeddelanden. På strömmade meddelanden loggas endast rubrikerna. Dessutom loggas säkra meddelanden som krypterade på den här nivån, förutom om en säker transport som HTTPS används.
Felaktig nivå
Felaktiga meddelanden är meddelanden som avvisas av WCF-stacken i alla skeden av bearbetningen. Felaktiga meddelanden loggas som de är: krypterade om så är fallet, med icke-korrekt XML och så vidare. maxSizeOfMessageToLog
definierat storleken på meddelandet som ska loggas som CDATA. Är som standard maxSizeOfMessageToLog
lika med 256 K. Mer information om det här attributet finns i avsnittet Andra alternativ.
Andra alternativ
Utöver loggningsnivåerna kan användaren ange följande alternativ:
Logga hela meddelandet (
logEntireMessage
attributet): Det här värdet anger om hela meddelandet (meddelanderubriken och brödtexten) loggas. Standardvärdet ärfalse
, vilket innebär att endast rubriken loggas. Den här inställningen påverkar loggningsnivåerna för tjänst- och transportmeddelanden..Maximalt antal meddelanden att logga (
maxMessagesToLog
attribut): Det här värdet anger det maximala antalet meddelanden som ska loggas. Alla meddelanden (tjänst, transport och felaktiga meddelanden) räknas mot den här kvoten. När kvoten har nåtts genereras en spårning och inget ytterligare meddelande loggas. Standardvärdet är 10000.Maximal storlek på meddelande till logg (
maxSizeOfMessageToLog
attribut): Det här värdet anger den maximala storleken på meddelanden för att logga in byte. Meddelanden som överskrider storleksgränsen loggas inte och ingen annan aktivitet utförs för meddelandet. Den här inställningen påverkar alla spårningsnivåer. Om ServiceModel-spårning är på genereras en spårning på varningsnivå vid den första loggningspunkten (ServiceModelSend* eller TransportReceive) för att meddela användaren. Standardvärdet för meddelanden på servicenivå och transportnivå är 256 000, medan standardvärdet för felaktiga meddelanden är 4K.Varning
Meddelandestorleken som beräknas att jämföras med
maxSizeOfMessageToLog
är meddelandestorleken i minnet före serialiseringen. Den här storleken kan skilja sig från den faktiska längden på meddelandesträngen som loggas och är vid många tillfällen större än den faktiska storleken. Därför kanske meddelanden inte loggas. Du kan ta hänsyn till detta genom attmaxSizeOfMessageToLog
ange att attributet ska vara 10 % större än den förväntade meddelandestorleken. Om felaktiga meddelanden loggas kan dessutom det faktiska diskutrymme som används av meddelandeloggarna vara upp till 5 gånger så stort som värdet som anges avmaxSizeOfMessageToLog
.
Om ingen spårningslyssnare definieras i konfigurationsfilen genereras inga loggningsutdata oavsett den angivna loggningsnivån.
Alternativ för meddelandeloggning, till exempel de attribut som beskrivs i det här avsnittet, kan ändras vid körning med hjälp av Windows Management Instrumentation (WMI). Detta kan göras genom att öppna AppDomainInfo-instansen, som exponerar dessa booleska egenskaper: LogMessagesAtServiceLevel
, LogMessagesAtTransportLevel
och LogMalformedMessages
. Om du konfigurerar en spårningslyssnare för meddelandeloggning, men anger dessa alternativ till false
i konfigurationen, kan du därför senare ändra dem till true
när programmet körs. Detta möjliggör effektivt meddelandeloggning vid körning. Om du aktiverar meddelandeloggning i konfigurationsfilen kan du inaktivera den vid körning med hjälp av WMI. Mer information finns i Använda Windows Management Instrumentation för diagnostik.
Fältet source
i en meddelandelogg anger i vilken kontext meddelandet loggas: när ett meddelande skickas/tas emot, för ett begärandesvar eller en 1-vägs begäran, i tjänstmodell eller transportlager, eller om ett felaktigt meddelande har skickats.
För felaktiga meddelanden source
är lika med Malformed
. Annars har källan följande värden baserat på kontexten.
För begäran/svar:
Skikt | Skicka begäran | Ta emot begäran | Skicka svar | Ta emot svar |
---|---|---|---|---|
Service Model-lager | Tjänst Nivå Skicka Förfrågan |
Tjänst Nivå Ta emot Förfrågan |
Tjänst Nivå Skicka Svar |
Tjänst Nivå Ta emot Svar |
Transportlager | Transport Skicka |
Transport Ta emot |
Transport Skicka |
Transport Ta emot |
För enkelriktad begäran:
Skikt | Skicka begäran | Ta emot begäran |
---|---|---|
Service Model-lager | Tjänst Nivå Skicka Datagram |
Tjänst Nivå Ta emot Datagram |
Transportlager | Transport Skicka |
Transport Ta emot |
Meddelandefilter
Meddelandefilter definieras i konfigurationselementet i messageLogging
konfigurationsavsnittet diagnostics
. De tillämpas på service- och transportnivå. När ett eller flera filter har definierats loggas endast meddelanden som matchar minst ett av filtren. Om inget filter har definierats passerar alla meddelanden.
Filter stöder den fullständiga XPath-syntaxen och tillämpas i den ordning de visas i konfigurationsfilen. Ett syntaktiskt felaktigt filter resulterar i ett konfigurationsfel.
Filter ger också en säkerhetsfunktion med hjälp av nodeQuota
attributet, som begränsar det maximala antalet noder i XPath DOM som kan undersökas för att matcha filtret.
I följande exempel visas hur du konfigurerar ett filter som endast registrerar meddelanden som har ett SOAP-huvudavsnitt.
<messageLogging logEntireMessage="true"
logMalformedMessages="true"
logMessagesAtServiceLevel="true"
logMessagesAtTransportLevel="true"
maxMessagesToLog="420">
<filters>
<add nodeQuota="10" xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
/soap:Envelope/soap:Header
</add>
</filters>
</messageLogging>
Filter kan inte tillämpas på brödtexten i ett meddelande. Filter som försöker ändra brödtexten i ett meddelande tas bort från listan med filter. En händelse genereras också som anger detta. Till exempel skulle följande filter tas bort från filtertabellen.
<add xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">/s:Envelope/s:Body[contains(text(), "Hello")]</add>
Konfigurera en anpassad lyssnare
Du kan också konfigurera en anpassad lyssnare med ytterligare alternativ. En anpassad lyssnare kan vara användbar när du filtrerar programspecifika PII-element från meddelanden innan du loggar. I följande exempel visas en anpassad lyssnarkonfiguration.
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="MyListener"
type="YourCustomListener"
initializeData="c:\logs\messages.svclog"
maxDiskSpace="1000"/>
</listeners>
</source>
</sources>
</system.diagnostics>
Du bör vara medveten om att type
attributet ska anges till ett kvalificerat sammansättningsnamn för typen.