Dela via


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.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.

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 logMessagesAtServiceLevelmessageLogging attribut , logMalformedMessagesoch 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 logMessagesAtServiceLevelmessageLogging attribut , logMalformedMessagesoch 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 är false, 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 att maxSizeOfMessageToLog 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 av maxSizeOfMessageToLog.

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 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.

Se även