Teilen über


Diagnosespuren

Ablaufverfolgung bedeutet das Veröffentlichen spezifischer Meldungen, die während der Anwendungsausführung generiert werden. Bei Verwendung der Ablaufverfolgung müssen Sie über einen Mechanismus zum Sammeln und Aufzeichnen der gesendeten Nachrichten verfügen. 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. Die von Ihnen erstellten Listener sollten Ihre individuellen Anforderungen widerspiegeln. Beispiel: Sie brauchen ein Textprotokoll der gesamten Ablaufverfolgungsausgabe. In diesem Fall würden Sie einen Listener erstellen, der alle Ausgaben in eine neue Textdatei schreibt, wenn er aktiviert ist. Andererseits möchten Sie die Ausgabe möglicherweise nur während der Anwendungsausführung anzeigen. 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 Ablaufverfolgungen während der Transaktionsverarbeitung zu aktivieren, sollten Sie die Konfigurationsdatei Ihrer Anwendung bearbeiten. Im Folgenden 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" benannt und den standardmäßigen .NET Framework-Ablaufverfolgungslistener (XmlWriterTraceListener) als typ hinzugefügt, den wir verwenden möchten. Verwenden Sie initializeData, um den Namen der Protokolldatei für diesen Listener festzulegen. Darüber hinaus können Sie einen vollqualifizierten Pfad durch einen einfachen Dateinamen ersetzen.

Jedem Typ von Ablaufverfolgungsmeldung wird eine Ebene zugewiesen, um seinen Wichtigkeitsgrad anzugeben. Wenn die Überwachungsebene der Anwendungsdomäne gleich oder niedriger als die Ebene eines Ereignistyps ist, wird diese Nachricht generiert. Die Ablaufverfolgungsebene wird von der switchValue-Einstellung in der Konfigurationsdatei kontrolliert. Die Ebenen, die mit Diagnoseverfolgungsmeldungen verbunden sind, werden in der folgenden Tabelle definiert.

Ablaufverfolgungsebene BESCHREIBUNG
Kritisch Schwerwiegende Fehler, wie z. B. die folgenden, sind aufgetreten:

– Ein Fehler, der einen sofortigen Verlust der Benutzerfunktionalität verursachen kann.
– Ein Ereignis, bei dem ein Administrator Maßnahmen ergreifen muss, um den Funktionsverlust zu vermeiden.
- Codefehler
- Diese Ablaufverfolgungsebene kann zudem genügenden Kontext zum Interpretieren anderer wichtiger Ablaufverfolgungen bereitstellen. Dies kann dazu beitragen, die Abfolge von Vorgängen zu identifizieren, die zu einem schwerwiegenden Fehler führen.
Fehler Ein Fehler (z. B. ungültiges Konfigurations- oder Netzwerkverhalten) ist aufgetreten, was zu einem Verlust der Benutzerfunktionalität führen kann.
Warnung Eine Bedingung ist vorhanden, die später zu einem Fehler oder kritischen Fehler führen kann (z. B. Zuordnungsfehler oder Näherung eines Grenzwerts). Die normale Verarbeitung von Fehlern aus Benutzercode (z. B. abgebrochene Transaktionen, Timeouts, Authentifizierungsfehler) kann auch eine Warnung generieren.
Informationen Nachrichten, die hilfreich sind, um den Systemstatus zu überwachen und zu diagnostizieren, die Leistung zu messen oder Profile zu erstellen. 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 für die Kapazitätsplanung und das Leistungsmanagement nutzen.

Rückverfolgungscodes

In der folgenden Tabelle sind die Tracing-Codes aufgeführt, die durch die System.Transactions Infrastruktur generiert werden. In der Tabelle sind der Verfolgungscode, die EventType-Enumerationsebene für die Ablaufverfolgung und die zusätzlichen Daten, die in TraceRecord für die Ablaufverfolgung enthalten sind, enthalten. Zudem wird auch die entsprechende Ablaufverfolgungsebene der Ablaufverfolgung im TraceRecord gespeichert.

TraceCode Eventtyp Zusätzliche Daten in TraceRecord
TransactionCreated Info Transaktionsverfolgungs-ID
TransactionPromoted Info Lokale Transaktionsverfolgungs-ID, Verteilte Transaktionsverfolgungs-ID
EnlistmentCreated Info TransactionTraceId, EnlistmentTraceId, EnlistmentType (dauerhaft/flüchtig), EnlistmentOptions
EnlistmentCallbackNegative Warnung TransactionTraceId, EnlistmentTraceId

Rückruf (forcerollback/aborted/indoubt)
TransactionRollbackCalled Warnung Transaktionsverfolgungs-ID
TransactionAborted Warnung Transaktionsverfolgungs-ID
TransactionInDoubt Warnung Transaktionsverfolgungs-ID
TransactionScopeCreated Info TransactionScopeResult, das folgendes sein kann:

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

Neue aktuelle TransactionTraceId
TransactionScopeDisposed Info TransactionTraceId der vom Bereich "erwarteten" aktuellen Transaktion
TransaktionsbereichUnvollständig Warnung TransactionTraceId der vom Bereich "erwarteten" aktuellen Transaktion
TransactionScopeNestedIn fälschlicherweise Warnung TransactionTraceId der vom Bereich "erwarteten" aktuellen Transaktion
TransaktionsbereichAktuelleTransaktionGeändert 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 Transaktionsverfolgungs-ID
WiederherstellungAbgeschlossen Info Ressourcen-Manager-GUID (von Basis)
Erneutes Auflisten Info Ressourcen-Manager-GUID (von Basis)
TransactionSerialized Info Transaktionsverfolgungs-ID.
TransactionException Fehler Ausnahmemeldung
InvalidOperationException Fehler Ausnahmemeldung
Interner Fehler Kritisch Ausnahmemeldung
Übertragungsereignis Wenn eine Transaktion deserialisiert oder von einer System.Transactions Transaktion zu einer verteilten Transaktion befördert wird, werden die aktuelle ActivityID aus dem ExecutionContext und die verteilte Transaktions-ID geschrieben.

Wenn der DTC in den verwalteten Code zurückkehrt, wird die verteilte Transaktions-ID für die Dauer des Callbacks als ActivityID im ExecutionContext festgelegt.
ConfiguredDefaultTimeoutAdjusted Warnung Keine zusätzlichen Daten
Transaktionszeitlimit Warnung Die TransactionTraceId der Transaktion hat das Zeitlimit überschritten.

Das XML-Schema für jedes der vorherigen zusätzlichen Datenelemente weist das folgende Format auf.

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

<ResourceManagerId>

string form of guid

</ResourceManagerId>

Sicherheitsprobleme bei der Nachverfolgung

Wenn Sie als Administrator die Ablaufverfolgung aktivieren, werden vertrauliche Informationen möglicherweise in ein Ablaufverfolgungsprotokoll geschrieben, das standardmäßig öffentlich sichtbar ist. Um mögliche Sicherheitsrisiken zu mindern, sollten Sie erwägen, das Ablaufverfolgungsprotokoll an einem sicheren Speicherort zu speichern, der durch Freigabe- und Dateisystemzugriffsberechtigungen gesteuert wird.