Diagnostikspårningar
Spårningar är publicering av specifika meddelanden som genereras under programkörningen. När du använder spårning måste du ha en mekanism för att samla in och registrera de meddelanden som skickas. Spårningsmeddelanden tas emot av lyssnare. Syftet med en lyssnare är att samla in, lagra och dirigera spårningsmeddelanden. Lyssnare dirigerar spårningsutdata till ett lämpligt mål, till exempel en logg-, fönster- eller textfil.
En sådan lyssnare, DefaultTraceListener, skapas och initieras automatiskt när spårning aktiveras. Om du vill att spårningsutdata ska dirigeras till ytterligare källor måste du skapa och initiera ytterligare spårningslyssnare. Lyssnarna du skapar bör återspegla dina individuella behov. Du kanske till exempel vill ha en textpost med alla spårningsutdata. I det här fallet skapar du en lyssnare som skrev alla utdata till en ny textfil när den aktiveras. Å andra sidan kanske du bara vill visa utdata under programkörningen. I så fall kan du skapa en lyssnare som dirigerar alla utdata till ett konsolfönster. EventLogTraceListener Kan dirigera spårningsutdata till en händelselogg och TextWriterTraceListener kan skriva spårningsutdata till en ström.
Aktivera spårning
Om du vill aktivera spårningar under transaktionsbearbetningen bör du redigera programmets konfigurationsfil. Följande är ett exempel.
<configuration>
<system.diagnostics>
<sources>
<source name="System.Transactions" switchValue="Warning">
<listeners>
<add name="tx"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "tx.log" />
</listeners>
</source>
</sources>
</system.diagnostics>
</configuration>
System.Transactions traces skrivs till källan med namnet "System.Transactions". Du kan använda add
för att ange namnet och typen av spårningslyssnare som du vill använda. I vår exempelkonfiguration gav vi lyssnaren namnet "tx" och lade till standardspårningslyssnaren för .NET Framework (XmlWriterTraceListener) som den typ vi vill använda. Använd initializeData
för att ange namnet på loggfilen för lyssnaren. Dessutom kan du ersätta en fullständigt kvalificerad sökväg med ett enkelt filnamn.
Varje typ av spårningsmeddelande tilldelas en nivå som anger dess prioritetsgrad. Om appdomänens spårningsnivå är lika med eller lägre än nivån för en händelsetyp genereras meddelandet. Spårningsnivån styrs av switchValue
inställningen i konfigurationsfilen. De nivåer som är associerade med diagnostikspårningsmeddelanden definieras i följande tabell.
Spårningsnivå | beskrivning |
---|---|
Kritiskt | Allvarliga fel, till exempel följande, har inträffat: – Ett fel som kan orsaka en omedelbar förlust av användarfunktioner. – En händelse som kräver att en administratör vidtar åtgärder för att undvika funktionsförlust. - Koden hänger sig. – Den här spårningsnivån kan också ge tillräcklig kontext för att tolka andra kritiska spårningar. Detta kan hjälpa dig att identifiera sekvensen av åtgärder som leder till ett allvarligt fel. |
Fel | Ett fel (till exempel ogiltig konfiguration eller nätverksbeteende) har inträffat som kan leda till att användarfunktionerna går förlorade. |
Varning | Det finns ett villkor som senare kan leda till ett fel eller ett kritiskt fel (till exempel att allokeringen misslyckas eller närmar sig en gräns). Normal bearbetning av fel från användarkod (till exempel avbruten transaktion, tidsgränser, autentisering misslyckades) kan också generera en varning. |
Information | Meddelanden som är användbara för att övervaka och diagnostisera systemstatus, mäta prestanda eller profilering genereras. Dessa kan omfatta transaktions- och registreringstidshändelser, till exempel en transaktion som skapas eller genomförs, korsning av en betydande gräns eller allokering av betydande resurser. En utvecklare kan sedan använda sådan information för kapacitetsplanering och prestandahantering. |
Spårningskoder
I följande tabell visas de spårningskoder som genereras av System.Transactions infrastrukturen. I tabellen ingår spårningskodidentifieraren, EventType uppräkningsnivån för spårningen och de extra data som finns i TraceRecord för spårningen. Dessutom lagras motsvarande spårningsnivå för spårningen i TraceRecord.
TraceCode | EventType | Extra data i TraceRecord |
---|---|---|
TransaktionSkapad | Info | TransactionTraceId |
TransactionPromoted | Info | Local TransactionTraceId, Distributed TransactionTraceId |
EnlistmentSkapad | Info | TransactionTraceId, EnlistmentTraceId, EnlistmentType (durable/volatile), EnlistmentOptions |
EnlistmentCallbackNegative | Varning | TransactionTraceId, EnlistmentTraceId, Återanrop (forcerollback/aborted/indoubt) |
TransactionRollbackCalled | Varning | TransactionTraceId |
TransactionAborted | Varning | TransactionTraceId |
TransactionInDoubt | Varning | TransactionTraceId |
TransactionScopeSkapat | Info | TransactionScopeResult, vilket kan vara följande: - Ny transaktion. - Transaktionen har skickats. – Beroende transaktion har skickats. – Med aktuell transaktion. - Ingen transaktion. nytt aktuellt TransactionTraceId |
TransactionScopeDisposed | Info | TransactionTraceId för omfångets "förväntade" aktuella transaktion. |
TransactionScopeIncomplete | Varning | TransactionTraceId för omfångets "förväntade" aktuella transaktion. |
TransactionScopeNestedIncorrectly | Varning | TransactionTraceId för omfångets "förväntade" aktuella transaktion. |
TransactionScopeCurrentTransactionChanged | Varning | Gammalt aktuellt TransactionTraceId, annat TransactionTraceId |
TransactionScopeTimeout | Varning | TransactionTraceId för omfångets "förväntade" aktuella transaktion. |
DependentCloneCreated | Info | TransactionTraceId, typ av beroende transaktion som skapats (RollbackIfNotComplete/BlockCommitUntilComplete) |
DependentCloneComplete | Info | TransactionTraceId |
RecoveryComplete | Info | Resource Manager GUID (från bas) |
Återlista | Info | Resource Manager GUID (från bas) |
TransactionSerialized | Info | TransactionTraceId. |
TransactionException | Fel | Undantagsmeddelande |
InvalidOperationException | Fel | Undantagsmeddelande |
InternalError | Kritiskt | Undantagsmeddelande |
TransferEvent | När en transaktion deserialiseras eller befordras från en System.Transactions transaktion till en distribuerad transaktion skrivs aktuellt ActivityID från ExecutionContext och det distribuerade transaktions-ID:t. När DTC anropar tillbaka till hanterad kod anges det distribuerade transaktions-ID:t som ActivityID i ExecutionContext under återanropets varaktighet. |
|
ConfiguredDefaultTimeoutAdjusted | Varning | Inga extra data |
TransactionTimeout | Varning | TransactionTraceId för transaktionen som överskrids. |
XML-schemat för vart och ett av de föregående extra dataobjekten har följande format.
TransactionTraceIdentifier
<TransactionTraceIdentifier>
<TransactionIdentifier >
string representation of transaction id
</TransactionIdentifier>
< CloneIdentifier >
the clone id number
</CloneIdentifier>
</TransactionTraceIdentifier>
EnlistmentTraceIdentifier
<EnlistmentTraceIdentifier>
<ResourceManagerId>
string form of guid
</ResourceManagerId>
<TransactionTraceIdentifier>
<TransactionIdentifier >
string representation of transaction id
</TransactionIdentifier>
<CloneIdentifier >
the clone id number
</CloneIdentifier>
<TransactionTraceIdentifier>
<EnlistmentIdentifier>
the enlistment id number
</EnlistmentIdentifier>
</EnlistmentTraceIdentifier>
Resource Manager-identifierare
<ResourceManagerId>
string form of guid
</ResourceManagerId>
Säkerhetsproblem för spårning
När du som administratör aktiverar spårning kan känslig information skrivas till en spårningslogg som kan visas offentligt som standard. För att minimera eventuella säkerhetshot bör du överväga att lagra spårningsloggen på en säker plats som styrs av behörigheter för resurs- och filsystemåtkomst.