Ablaufverfolgungen zur Diagnose

Ablaufverfolgung bedeutet das Veröffentlichen spezifischer Meldungen, die während der Anwendungsausführung generiert werden. Wenn Sie mit der Ablaufverfolgung arbeiten, müssen Sie einen Mechanismus zum Sammeln und Aufzeichnen der gesendeten Meldungen einrichten. Ablaufverfolgungsmeldungen werden von Listenern empfangen. Der Zweck eines Listeners ist das Sammeln, Speichern und Weiterleiten von Ablaufverfolgungsmeldungen. Listener leiten die Ablaufverfolgungsausgabe an ein entsprechendes Ziel, beispielsweise ein Protokoll, ein Fenster oder eine Textdatei.

Ein solcher Listener, der DefaultTraceListener, wird bei Aktivierung der Ablaufverfolgung automatisch erstellt und initialisiert. Wenn die Ausgabe der Ablaufverfolgung an zusätzliche Quellen geleitet werden soll, müssen Sie zusätzliche Ablaufverfolgungslistener erstellen und initialisieren. Erstellen Sie Listener, die auf Ihre individuellen Anforderungen abgestimmt sind. Beispiel: Sie brauchen ein Textprotokoll der gesamten Ablaufverfolgungsausgabe. In diesem Fall erstellen Sie einen Listener, der die gesamte Ausgabe in eine neue Textdatei schreibt, sobald er aktiviert wird. Oft ist die Anzeige der Ausgabe jedoch nur während der Anwendungsausführung erwünscht. In diesem Fall erstellen Sie einen Listener, der die gesamte Ausgabe an ein Konsolenfenster leitet. Der EventLogTraceListener kann die Ablaufverfolgungsausgabe an ein Ereignisprotokoll leiten, und der TextWriterTraceListener kann die Ablaufverfolgungsausgabe in einen Datenstrom schreiben.

Aktivieren der Ablaufverfolgung

Um die Ablaufverfolgung während der Transaktionsverarbeitung zu aktivieren, müssen Sie die Konfigurationsdatei der Anwendung bearbeiten. Nachfolgend finden Sie ein Beispiel:

<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-Ablaufverfolgungen werden in die Quelle mit dem Namen "System.Transactions" geschrieben. Mit add können Sie den Namen und den Typ des Ablaufverfolgungslisteners angeben, den Sie verwenden möchten. In unserer Beispielkonfiguration haben wir den Listener "tx" genannt und den standardmäßigen Ablaufverfolgungslistener .NET Framework (XmlWriterTraceListener) als zu verwendenden Typ angegeben. Verwenden Sie initializeData, um den Namen der Protokolldatei für diesen Listener festzulegen. Außerdem können Sie einen einfachen Dateinamen durch einen vollqualifizierten Pfad ersetzen.

Jedem Typ von Ablaufverfolgungsmeldung wird eine Ebene zugewiesen, um seinen Wichtigkeitsgrad anzugeben. Befindet sich die Ablaufverfolgungsebene der Anwendungsdomäne auf der gleichen Ebene wie ein Ereignistyp, oder einer niedrigeren, wird diese Meldung erzeugt. Die Ablaufverfolgungsebene wird von der switchValue-Einstellung in der Konfigurationsdatei kontrolliert. Die Ebenen, die diagnostischen Ablaufverfolgungsmeldungen zugeordnet werden, sind in der folgenden Tabelle definiert.

Ablaufverfolgungsebene Beschreibung
Kritisch Schwerwiegende Fehler wie die nachfolgend aufgeführten sind aufgetreten:

- Ein Fehler, der die Benutzerfunktionalität unmittelbar beeinträchtigen kann
- Ein Ereignis, das den Eingriff eines Administrators erfordert, um die Beeinträchtigung der Funktionalität zu vermeiden
- Codefehler
- Diese Ablaufverfolgungsebene kann zudem genügenden Kontext zum Interpretieren anderer wichtiger Ablaufverfolgungen bereitstellen. Dies kann helfen, die Sequenz von Vorgängen zu identifizieren, die zu einem schwerwiegenden Fehler führt.
Fehler Ein Fehler (beispielsweise ungültiges Konfigurations- oder Netzwerkverhalten) ist aufgetreten, der zu einer Beeinträchtigung der Benutzerfunktionalität führen kann.
Warnung Es besteht eine Bedingung, die zu einem Fehler oder einem schwerwiegenden Ausfall führen kann (z. B. Speicherbelegung oder Annäherung an einen Grenzwert). Die normale Verarbeitung von Benutzercodefehlern (z. B. Transaktionsabbruch, Timeouts oder Authentifizierungsfehler) kann ebenfalls eine Warnung auslösen.
Information Meldungen, die bei der Überwachung und Diagnose des Systemstatus, der Leistungsmessung oder Profilerstellung nützlich sind. Dazu gehören Transaktions- und Eintragungslebensdauer-Ereignisse wie beispielsweise eine Transaktion, die erstellt oder für die ein Commit ausgeführt wird, das Überschreiten einer wichtigen Begrenzung oder die Speicherbelegung bedeutender Ressourcen. Ein Entwickler kann dann solche Informationen zur Kapazitätsplanung und Leistungsverwaltung nutzen.

Ablaufverfolgungscodes

In der folgenden Tabelle sind die Ablaufverfolgungscodes aufgeführt, die von der System.Transactions-Infrastruktur generiert werden. Außerdem werden der Codebezeichner und dieEventType -Enumerationsebene für die Ablaufverfolgung sowie zusätzliche Daten aus dem TraceRecord für die Ablaufverfolgung in der Tabelle angegeben. Zudem wird auch die entsprechende Ablaufverfolgungsebene der Ablaufverfolgung im TraceRecord gespeichert.

TraceCode EventType Zusätzliche Daten in TraceRecord
TransactionCreated Info TransactionTraceId
TransactionPromoted Info Local TransactionTraceId, Distributed TransactionTraceId
EnlistmentCreated Info TransactionTraceId, EnlistmentTraceId, EnlistmentType (durable/volatile), EnlistmentOptions
EnlistmentCallbackNegative Warnung TransactionTraceId, EnlistmentTraceId

Callback (forcerollback/aborted/indoubt)
TransactionRollbackCalled Warnung TransactionTraceId
TransactionAborted Warnung TransactionTraceId
TransactionInDoubt Warnung TransactionTraceId
TransactionScopeCreated Info TransactionScopeResult, das folgendes sein kann:

- Neue Transaktion
- Transaktion ausgeführt
- Abhängige Transaktion ausgeführt
- Mit aktueller Transaktion
- Keine Transaktion

Neue aktuelle TransactionTraceId
TransactionScopeDisposed Info TransactionTraceId der vom Bereich "erwarteten" aktuellen Transaktion
TransactionScopeIncomplete Warnung TransactionTraceId der vom Bereich "erwarteten" aktuellen Transaktion
TransactionScopeNestedIncorrectly Warnung TransactionTraceId der vom Bereich "erwarteten" aktuellen Transaktion
TransactionScopeCurrentTransactionChanged Warnung Alte aktuelle TransactionTraceId, sonstige TransactionTraceId
TransactionScopeTimeout Warnung TransactionTraceId der vom Bereich "erwarteten" aktuellen Transaktion
DependentCloneCreated Info TransactionTraceId, Typ der erzeugten abhängigen Transaktion (RollbackIfNotComplete/BlockCommitUntilComplete)
DependentCloneComplete Info TransactionTraceId
RecoveryComplete Info Ressourcen-Manager-GUID (von Basis)
Reenlist Info Ressourcen-Manager-GUID (von Basis)
TransactionSerialized Info TransactionTraceId
TransactionException Fehler Ausnahmemeldung
InvalidOperationException Fehler Ausnahmemeldung
InternalError Kritisch Ausnahmemeldung
TransferEvent Wenn eine Transaktion deserialisiert oder von einer System.Transactions-Transaktion zu einer verteilten Transaktion erweitert wird, werden die aktuelle ActivityID aus ExecutionContext und die ID der verteilten Transaktion geschrieben.

Wenn DTC verwalteten Code zurückruft, wird die ID der verteilten Transaktion für die Dauer des Rückrufs als ActivityID in ExecutionContext festgelegt.
ConfiguredDefaultTimeoutAdjusted Warnung Keine zusätzlichen Daten
TransactionTimeout Warnung Die TransactionTraceId der Transaktion hat das Zeitlimit überschritten.

Das XML-Schema für jedes der vorangehenden zusätzlichen Datenelemente hat das folgende 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>

Ressourcen-Manager-Bezeichner

<ResourceManagerId>

string form of guid

</ResourceManagerId>

Sicherheitsprobleme bei der Ablaufverfolgung

Wenn Sie als Administrator die Ablaufverfolgung aktivieren, könnten vertrauliche Informationen in ein Ablaufverfolgungsprotokoll geschrieben werden, auf das standardmäßig öffentlich zugegriffen werden kann. Um mögliche Sicherheitsrisiken zu mindern, sollten Sie das Ablaufverfolgungsprotokoll an einem sicheren Ort speichern, der durch Zugriffsberechtigungen für Freigaben und Dateisysteme kontrolliert wird.