Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Ez a témakör azt ismerteti, hogyan konfigurálhatja az üzenetnaplózást különböző helyzetekben.
Üzenetnaplózás engedélyezése
A Windows Communication Foundation (WCF) alapértelmezés szerint nem naplózza az üzeneteket. Az üzenetnaplózás aktiválásához fel kell vennie egy nyomkövetési figyelőt a System.ServiceModel.MessageLogging nyomkövetési forráshoz, és meg kell adnia a <messagelogging> konfigurációs fájlban lévő elem attribútumait.
Az alábbi példa bemutatja, hogyan engedélyezheti a naplózást, és hogyan adhat meg további beállításokat.
<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>
További információ az üzenetnaplózási beállításokról: Ajánlott beállítások nyomkövetéshez és üzenetnaplózáshoz.
A add segítségével megadhatja a használni kívánt figyelő nevét és típusát. A példakonfigurációban a figyelő neve "üzenetek", és a szabványos .NET-keretrendszer nyomkövetési figyelőt (System.Diagnostics.XmlWriterTraceListener) adja hozzá a használni kívánt típushoz. Ha használja System.Diagnostics.XmlWriterTraceListener, meg kell adnia a kimeneti fájl helyét és nevét a konfigurációs fájlban. Ez a naplófájl nevére való beállítással initializeData végezhető el. Ellenkező esetben a rendszer kivételt jelez. Olyan egyéni figyelőt is implementálhat, amely naplókat bocsát ki egy alapértelmezett fájlba.
Megjegyzés:
Mivel az üzenetnaplózás hozzáfér a lemezterülethez, korlátoznia kell az adott szolgáltatás lemezére írt üzenetek számát. Az üzenetkorlát elérésekor a rendszer az információs szinten létrehoz egy nyomkövetést, és az összes üzenetnaplózási tevékenység leáll.
A naplózási szintet és a további lehetőségeket a Naplózási szint és beállítások szakaszban tárgyaljuk.
Egy switchValue attribútum source csak nyomkövetésre érvényes. Ha az alábbiak szerint ad meg egy switchValue attribútumot a System.ServiceModel.MessageLogging nyomkövetési forráshoz, annak nincs hatása.
<source name="System.ServiceModel.MessageLogging" switchValue="Verbose">
</source>
Ha le szeretné tiltani a nyomkövetési forrást, használja inkább a logMessagesAtServiceLevel, logMalformedMessages és logMessagesAtTransportLevel attribútumait a messageLogging elemnek. Ezeket az attribútumokat a következőre falsekell beállítania: . Ez az előző kódpéldában található konfigurációs fájl használatával, a Configuration Editor felhasználói felületén vagy a WMI használatával végezhető el. A Konfigurációszerkesztő eszközről további információt a Configuration Editor Tool (SvcConfigEditor.exe) című cikkben talál. A WMI-ről további információt a Windows Management Instrumentation for Diagnostics használata című témakörben talál.
Naplózási szintek és beállítások
Bejövő üzenetek esetén a naplózás közvetlenül az üzenet létrejötte után történik, közvetlenül azelőtt, hogy az üzenet a szolgáltatás szintjén a felhasználói kódhoz jutna, és ha a rendszer hibásan formázott üzeneteket észlel.
Kimenő üzenetek esetén a naplózás közvetlenül azután történik, hogy az üzenet elhagyja a felhasználói kódot, és közvetlenül azelőtt, hogy az üzenet a vezetékre kerül.
A WCF két különböző szinten naplózza az üzeneteket, a szolgáltatást és az átvitelt. A rendszer a hibásan formázott üzeneteket is naplózza. A három kategória egymástól független, és konfigurációban külön aktiválható.
Az logMessagesAtServiceLevel, logMalformedMessages és logMessagesAtTransportLevel attribútumok beállításával szabályozhatja a naplózási szintet a messageLogging elem esetében.
Szolgáltatásszint
Az ezen a rétegen naplózott üzenetek a felhasználói kód megadására (fogadáskor) vagy kilépésre (küldéskor) kerülnek. Ha a szűrők definiálva vannak, a rendszer csak a szűrőknek megfelelő üzeneteket naplózza. Ellenkező esetben a szolgáltatásszinten lévő összes üzenet naplózva lesz. Az infrastruktúra-üzenetek (tranzakciók, társcsatorna és biztonság) is ezen a szinten vannak naplózva, kivéve a megbízható üzenetküldési üzeneteket. Streamelt üzenetek esetén csak a fejlécek kerülnek naplózásra. Emellett a biztonságos üzenetek ezen a szinten visszafejtve vannak naplózva.
Szállítási szint
Az ezen a rétegen naplózott üzenetek készen állnak a vezetéken való szállításra vagy azok után történő kódolásra vagy dekódolásra. Ha a szűrők definiálva vannak, a rendszer csak a szűrőknek megfelelő üzeneteket naplózza. Ellenkező esetben a rendszer az átviteli réteg összes üzenetét naplózza. A rendszer ezen a rétegen naplózza az összes infrastrukturális üzenetet, beleértve a megbízható üzenetküldési üzeneteket is. Streamelt üzenetek esetén csak a fejlécek kerülnek naplózásra. A biztonságos üzeneteket ezen a szinten titkosítva naplózza a rendszer, kivéve, ha biztonságos átvitelt használ, például HTTPS-t.
Hibásan formázott szint
A hibásan formázott üzenetek olyan üzenetek, amelyeket a WCF-verem a feldolgozás bármely szakaszában elutasít. A hibásan formázott üzeneteket naplózzuk as-is: titkosítva, ha azok hibásak, nem megfelelő az XML, és így tovább.
maxSizeOfMessageToLog meghatározta a CDATA-ként naplózandó üzenet méretét. Alapértelmezés szerint maxSizeOfMessageToLog 256K-nak felel meg. Az attribútummal kapcsolatos további információkért lásd az Egyéb beállítások szakaszt.
Egyéb beállítások
A naplózási szinteken kívül a felhasználó a következő beállításokat is megadhatja:
Teljes üzenet naplózása (
logEntireMessageattribútum): Ez az érték azt határozza meg, hogy a teljes üzenet (üzenetfejléc és szövegtörzs) naplózva van-e. Az alapértelmezett érték azfalse, ami azt jelenti, hogy csak a fejléc van naplózva. Ez a beállítás hatással van a szolgáltatás és az átviteli üzenetek naplózási szintjére.Naplózandó üzenetek maximális száma (
maxMessagesToLogattribútum): Ez az érték határozza meg a naplózandó üzenetek maximális számát. Az összes üzenet (szolgáltatás, átvitel és hibásan formázott üzenetek) beleszámít ebbe a kvótába. A kvóta elérésekor a rendszer nyomkövetést bocsát ki, és nem naplóz további üzenetet. Az alapértelmezett érték 10000.A naplózni kívánt üzenet maximális mérete (
maxSizeOfMessageToLogattribútum): Ez az érték határozza meg a bájtokban bejelentkezni kívánt üzenetek maximális méretét. A rendszer nem naplózza a méretkorlátot meghaladó üzeneteket, és nem végez más tevékenységet az üzenethez. Ez a beállítás minden nyomkövetési szintet érint. Ha a ServiceModel-nyomkövetés be van kapcsolva, a rendszer figyelmeztetési szintű nyomkövetést ad ki az első naplózási ponton (ServiceModelSend* vagy TransportReceive), amely értesíti a felhasználót. A szolgáltatásszintű és az átviteli szintű üzenetek alapértelmezett értéke 256 K, míg a hibásan formázott üzenetek alapértelmezett értéke 4K.Figyelmeztetés
Az a kiszámított üzenetméret, amelyet az
maxSizeOfMessageToLogértékkel hasonlítanak össze, a memória üzenetmérete a szerializálás előtt van. Ez a méret eltérhet a naplózott üzenetsztring tényleges hosszától, és sok esetben nagyobb, mint a tényleges méret. Emiatt előfordulhat, hogy az üzenetek nem lesznek naplózva. Ezt a tényt úgy tudja figyelembe venni, hogy azmaxSizeOfMessageToLogattribútum értéke 10% nagyobb, mint a várt üzenetméret. Továbbá, ha helytelenül formázott üzenetek naplózásra kerülnek, az üzenetnaplók által felhasznált tényleges lemezterület akár ötszöröse is lehet amaxSizeOfMessageToLogáltal megadott értéknek.
Ha a konfigurációs fájlban nincs nyomkövetési figyelő, a megadott naplózási szinttől függetlenül nem jön létre naplózási kimenet.
Az üzenetnaplózási beállítások, például az ebben a szakaszban ismertetett attribútumok futásidőben módosíthatók a Windows Management Instrumentation (WMI) használatával. Ez az AppDomainInfo-példány elérésével végezhető el, amely a következő logikai tulajdonságokat teszi elérhetővé: LogMessagesAtServiceLevel, LogMessagesAtTransportLevelés LogMalformedMessages. Ezért ha konfigurál egy nyomkövetési figyelőt az üzenetnaplózáshoz, és ezeket a beállításokat false értékre állítja be a konfigurációban, később megváltoztathatja őket true értékre, amikor az alkalmazás fut. Ez hatékonyan teszi lehetővé az üzenetek futásidőben történő naplózását. Hasonlóképpen, ha engedélyezi az üzenetnaplózást a konfigurációs fájlban, futásidőben letilthatja azt a WMI használatával. További információ: A Windows Management Instrumentation használata a diagnosztika számára.
Az source üzenetnapló mezője meghatározza, hogy az üzenet mely környezetben legyen naplózva: kérésüzenet küldésekor/fogadásakor, válaszkérés vagy egyirányú kérés esetén, szolgáltatási modellben vagy átviteli rétegben, vagy hibásan formázott üzenet esetén.
Hibásan formázott üzenetek esetén a source egyenlő a Malformed értékével. Ellenkező esetben a forrás a következő értékekkel rendelkezik a környezet alapján.
Kérés/válasz esetén:
| Réteg | Kérés küldése | Kérés fogadása | Válasz küldése | Válasz fogadása |
|---|---|---|---|---|
| Szolgáltatásmodell-réteg | Szolgáltatás szint Küld Kérelem |
Szolgáltatás szint Megkap Kérelem |
Szolgáltatás szint Küld Válasz |
Szolgáltatás szint Megkap Válasz |
| Átviteli réteg | Szállítás Küld |
Szállítás Megkap |
Szállítás Küld |
Szállítás Megkap |
Egyirányú kérés esetén:
| Réteg | Kérés küldése | Kérés fogadása |
|---|---|---|
| Szolgáltatásmodell-réteg | Szolgáltatás szint Küld Datagram |
Szolgáltatás szint Megkap Datagram |
| Átviteli réteg | Szállítás Küld |
Szállítás Megkap |
Üzenetszűrők
Az üzenetszűrők a messageLogging konfigurációs szakasz konfigurációs elemében diagnostics vannak definiálva. Az alkalmazásuk a szolgáltatás és a szállítás szintjén történik. Egy vagy több szűrő definiálásakor a rendszer csak az egyik szűrőnek megfelelő üzeneteket naplózza. Ha nincs definiálva szűrő, az összes üzenet áthalad.
A szűrők támogatják a teljes XPath-szintaxist, és a konfigurációs fájlban megjelenő sorrendben lesznek alkalmazva. A szintaktikailag helytelen szűrő konfigurációs kivételt eredményez.
A szűrők egy biztonsági funkciót is biztosítanak az nodeQuota attribútum használatával, amely korlátozza az XPath DOM-ban a maximálisan megvizsgálható csomópontok számát a szűrőnek megfelelően.
Az alábbi példa bemutatja, hogyan konfigurálhat olyan szűrőt, amely csak a SOAP fejlécszakaszt tartalmazó üzeneteket rögzíti.
<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>
A szűrők nem alkalmazhatók az üzenet törzsére. Az üzenetek törzsét manipulálni próbáló szűrők törlődnek a szűrők listájából. A rendszer egy eseményt is kibocsát, amely ezt jelzi. A következő szűrő például el lesz távolítva a szűrőtáblából.
<add xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">/s:Envelope/s:Body[contains(text(), "Hello")]</add>
Egyéni figyelő konfigurálása
Egyéni figyelőt további beállításokkal is konfigurálhat. Az egyéni figyelők hasznosak lehetnek az alkalmazásspecifikus PII-elemek szűrésében az üzenetekből a naplózás előtt. Az alábbi példa egy egyéni figyelőkonfigurációt mutat be.
<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>
Vegye figyelembe, hogy az type attribútumot a típus minősített szerelvénynevére kell beállítani.