Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.XmlWriterTraceListenermå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.
Anmärkning
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 istället använda attributen logMessagesAtServiceLevel, logMalformedMessages och logMessagesAtTransportLevel för messageLogging-elementet. 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 Configuration Editor Tool (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 ställa in logMessagesAtServiceLevel, logMalformedMessages och logMessagesAtTransportLevel attributen för messageLogging elementet.
Tjänstnivå
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 meddelanden för tillförlitlig meddelandehantering. På strömmade meddelanden loggas endast rubrikerna. Dessutom loggas säkra meddelanden dekrypterade 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 as-is: krypteras om så är fallet, med icke-korrekt XML och så vidare.
maxSizeOfMessageToLog definierat storleken på meddelandet som ska loggas som CDATA. Som standard är maxSizeOfMessageToLog lika med 256K. 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 (
logEntireMessageattributet): 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 (
maxMessagesToLogattribut): 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 att logga (
maxSizeOfMessageToLogattribut): Det här värdet anger den maximala storleken på meddelanden i 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 K, medan standardvärdet för felaktiga meddelanden är 4 K.Försiktighet
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 att angemaxSizeOfMessageToLogattributet till 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, LogMessagesAtTransportLeveloch 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 är source 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änster Nivå Sända Begäran |
Tjänster Nivå Ta emot Begäran |
Tjänster Nivå Sända Svar |
Tjänster Nivå Ta emot Svar |
| Transportlager | Transport Sända |
Transport Ta emot |
Transport Sända |
Transport Ta emot |
För enkelriktad begäran:
| Skikt | Skicka begäran | Ta emot begäran |
|---|---|---|
| Service Model-lager | Tjänster Nivå Sända Datagram |
Tjänster Nivå Ta emot Datagram |
| Transportlager | Transport Sända |
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.