Diagnostické trasování

Trasování je publikování specifických zpráv, které se generují během běhu aplikace. Při použití trasování musíte mít mechanismus pro shromažďování a zaznamenávání odesílaných zpráv. Trasovací zprávy přijímají posluchači. Účelem posluchače je shromažďovat, ukládat a směrovat trasovací zprávy. Posluchače směřují výstup trasování do vhodného cíle, jako je protokol, okno nebo textový soubor.

Jeden takový naslouchací proces DefaultTraceListener je automaticky vytvořen a inicializován při povolení trasování. Pokud chcete směrovat výstup trasování do jakýchkoli dalších zdrojů, musíte vytvořit a inicializovat další naslouchací komponenty trasování. Posluchači, které vytvoříte, by měli odrážet vaše individuální potřeby. Můžete například chtít textový záznam veškerého výstupu trasování. V tomto případě byste vytvořili posluchač, který by při povolení zapisoval veškerý výstup do nového textového souboru. Na druhou stranu můžete chtít zobrazit výstup jenom během provádění aplikace. V takovém případě můžete vytvořit posluchač, který směruje veškerý výstup do okna konzole. Výstup trasování lze směrovat do protokolu událostí EventLogTraceListener a výstup trasování lze zapisovat do datového proudu TextWriterTraceListener.

Povolení trasování

Pokud chcete povolit trasování během zpracování transakcí, měli byste upravit konfigurační soubor aplikace. Následuje příklad.

<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 stopy jsou zapisovány do zdroje s názvem System.Transactions. Můžete použít add k zadání názvu a typu naslouchacího prvku trasování. V naší ukázkové konfiguraci jsme pojmenovali naslouchací objekt "tx" a přidali standardní naslouchací objekt trasování rozhraní .NET Framework (XmlWriterTraceListener) jako typ, který chceme použít. Pomocí initializeData nastavte název souboru protokolu pro tohoto posluchače. Kromě toho můžete nahradit plně kvalifikovanou cestu jednoduchým názvem souboru.

Každému typu zprávy trasování je přiřazena úroveň označující její stupeň důležitosti. Pokud je úroveň trasování domény aplikace stejná nebo nižší než úroveň typu události, vygeneruje se tato zpráva. Úroveň trasování se řídí nastavením switchValue v konfiguračním souboru. Úrovně spojené se zprávami diagnostického trasování jsou definovány v následující tabulce.

Úroveň trasování Popis
Kritický Došlo k vážným selháním, například k následujícímu:

– Chyba, která může způsobit okamžitou ztrátu funkčnosti uživatele.
– Událost, která vyžaduje, aby správce podnikl akci, aby se zabránilo ztrátě funkčnosti.
- Kód přestane reagovat.
– Tato úroveň trasování může také poskytnout dostatečný kontext pro interpretaci dalších kritických stop. To může pomoct identifikovat posloupnost operací, které vedou k závažnému selhání.
Chyba Došlo k chybě (například neplatné chování konfigurace nebo sítě), která může vést ke ztrátě funkčnosti uživatele.
Výstraha Existuje podmínka, která může následně vést k chybě nebo kritickému selhání (například selhání přidělení nebo dosažení limitu). Normální zpracování chyb z uživatelského kódu (například přerušené transakce, vypršení časového limitu, selhání ověřování) může také vygenerovat upozornění.
Informace Generují se zprávy užitečné pro monitorování a diagnostiku stavu systému, měření výkonu nebo profilace. Může se jednat o události životnosti transakcí a zařazení, jako je vytvoření nebo potvrzení transakce, překročení významné hranice nebo přidělení významných zdrojů. Vývojář pak může tyto informace využít k plánování kapacity a správě výkonu.

Trasovací kódy

V následující tabulce jsou uvedeny kódy trasování vygenerované infrastrukturou System.Transactions . Součástí tabulky jsou identifikátor trasovacího kódu, EventType úroveň výčtu pro trasování a další data obsažená v TraceRecord pro trasování. Kromě toho je odpovídající úroveň trasování také uložena v záznamu TraceRecord.

Trasovací kód Typ události Dodatečná data v trasovacím záznamu
TransakceVytvořena Informace TransactionTraceId
TransactionPromoted Informace Identifikátor místní transakce, Identifikátor distribuované transakce
RegistraceVytvořena Informace TransactionTraceId, EnlistmentTraceId, EnlistmentType (trvalý/nestálý), EnlistmentOptions
ZpětnéVoláníZaevidováníNegativní Výstraha TransactionTraceId, EnlistmentTraceId,

Zpětné volání (vynucené obnovení/přerušeno/nejisté)
TransactionRollbackCalled Výstraha TransactionTraceId
Transakce byla zrušena Výstraha TransactionTraceId
TransactionInDoubt Výstraha TransactionTraceId
Vytvořen rozsah transakce Informace TransactionScopeResult, což může být následující:

- Nová transakce.
- Transakce byla schválena.
- Byla předána závislá transakce.
- Použití aktuální transakce.
- Žádná transakce.

nový aktuální TransactionTraceId
TransactionScopeDisposed Informace TransactionTraceId "očekávané" aktuální transakce oboru.
Neúplný Rozsah Transakce Výstraha TransactionTraceId "očekávané" aktuální transakce oboru.
TransactionScopeNesprávněZanořen Výstraha TransactionTraceId "očekávané" aktuální transakce oboru.
ZměnaAktuálníTransakceVOboruTransakce Výstraha Staré aktuální TransactionTraceId, jiné TransactionTraceId
Časový limit objektu TransactionScope Výstraha TransactionTraceId "očekávané" aktuální transakce oboru.
VytvořenZávislýKlon Informace TransactionTraceId, typ závislé transakce vytvořené (RollbackIfNotComplete/BlockCommitUntilComplete)
DependentCloneComplete Informace TransactionTraceId
Obnova dokončena Informace GUID Správce prostředků (základ)
Znovu vstoupit do služby Informace GUID Správce prostředků (základ)
TransakceSerializována Informace TransactionTraceId.
TransactionException Chyba Zpráva o výjimce
InvalidOperationException Chyba Zpráva o výjimce
Vnitřní chyba Kritický Zpráva o výjimce
TransferEvent Pokud je transakce deserializována nebo povýšena z System.Transactions transakce na distribuovanou, jsou zapsány aktuální ActivityID z ExecutionContext a ID distribuované transakce.

Když DTC volá zpět do spravovaného kódu, je ID distribuované transakce po dobu trvání zpětného volání nastaveno jako ActivityID v ExecutionContext.
NastavenýVýchozíTimeoutUpravený Výstraha Žádná další data
Časový limit transakce Výstraha TransactionTraceId transakce, které vypršel časový limit.

Schéma XML pro každou z předchozích dodatečných datových položek má následující formát.

IdentifikátorTransakčníhoSledování

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

Identifikátor Resource Manageru

<ResourceManagerId>

string form of guid

</ResourceManagerId>

Problémy se zabezpečením trasování

Když jako správce zapnete trasování, můžou se citlivé informace zapisovat do protokolu trasování, který je ve výchozím nastavení veřejně zobrazitelný. Pokud chcete zmírnit případné bezpečnostní hrozby, měli byste zvážit uložení protokolu trasování do zabezpečeného umístění řízeného oprávněními pro přístup ke sdílené složce a systému souborů.