Teilen über


Konfigurieren der Ablaufverfolgung

In diesem Thema wird Folgendes beschrieben: das Aktivieren der Ablaufverfolgung, das Konfigurieren von Ablaufverfolgungsquellen zum Ausgeben von Ablaufverfolgungen, das Festlegen von Ablaufverfolgungsebenen, das Festlegen der Aktivitätsablaufverfolgung und -weitergabe zur Unterstützung der End-to-End-Ablaufverfolgungskorrelation sowie das Festlegen von Ablaufverfolgungslistenern für den Zugriff auf Ablaufverfolgungen.

Empfehlungen für Ablaufverfolgungseinstellungen in der Produktions- oder Debugumgebung finden Sie unter "Empfohlene Einstellungen für Ablaufverfolgung und Nachrichtenprotokollierung".

Von Bedeutung

Unter Windows 8 müssen Sie die Anwendung mit erhöhten Rechten (als Administrator ausführen) ausführen, damit Ihre Anwendung Ablaufverfolgungsprotokolle generiert.

Aktivieren der Ablaufverfolgung

Windows Communication Foundation (WCF) gibt die folgenden Daten für die Diagnoseablaufverfolgung aus:

  • Ablaufverfolgungen für Prozessmeilensteine in allen Komponenten der Anwendungen, z. B. Vorgangsaufrufe, Code-Ausnahmen, Warnungen und andere wichtige Verarbeitungsereignisse.

  • Windows-Fehlerereignisse bei Fehlern der Ablaufverfolgungsfunktion. Siehe Ereignisprotokollierung.

Die WCF-Ablaufverfolgung basiert auf System.Diagnostics. Um die Ablaufverfolgung zu verwenden, sollten Sie Ablaufverfolgungsquellen in der Konfigurationsdatei oder im Code definieren. WCF definiert eine Ablaufverfolgungsquelle für jede WCF-Assembly. Die System.ServiceModel-Ablaufverfolgungsquelle ist die allgemeinste WCF-Ablaufverfolgungsquelle. Sie zeichnet Verarbeitungsmeilensteine im WCF-Kommunikationsstapel vom Eintreten/Verlassen des Transports bis zum Eintreten/Verlassen des Benutzercodes auf. Die Trace-Quelle System.ServiceModel.MessageLogging zeichnet alle durch das System fließenden Nachrichten auf.

Die Ablaufverfolgung ist standardmäßig nicht aktiviert. Zum Aktivieren der Ablaufverfolgung müssen Sie einen Ablaufverfolgungslistener erstellen und eine andere Ablaufverfolgungsebene als "Aus" für die ausgewählte Ablaufverfolgungsquelle in der Konfiguration festlegen. andernfalls generiert WCF keine Ablaufverfolgungen. Wenn Sie keinen Listener angeben, ist die Ablaufverfolgung automatisch deaktiviert. Wenn Sie einen Listener definieren, jedoch keine Ebene angeben, wird die Ebene standardmäßig auf "Off" festgelegt. Das bedeutet, dass keine Ablaufverfolgung ausgegeben wird.

Wenn Sie WCF-Erweiterungspunkte (z.  B. aufrufende Instanzen für benutzerdefinierte Vorgänge) verwenden, müssen Sie eigene Ablaufverfolgungen ausgeben. Das liegt daran, dass WCF bei Implementierung eines Erweiterungspunkts die Standardablaufverfolgungen nicht mehr im Standardpfad ausgeben kann. Wenn Sie keine Unterstützung für eine manuelle Ablaufverfolgung durch Ausgabe von Ablaufverfolgungen implementieren, werden die erwarteten Ablaufverfolgungen möglicherweise nicht angezeigt.

Sie können die Ablaufverfolgung konfigurieren, indem Sie die Konfigurationsdatei der Anwendung bearbeiten – entweder Web.config für webgehostete Anwendungen oder Appname.exe.config für selbst gehostete Anwendungen. Im Folgenden sehen Sie ein Beispiel für eine solche Bearbeitung. Weitere Informationen zu diesen Einstellungen finden Sie im Abschnitt „Konfigurieren von Ablaufverfolgungslistenern zur Verwendung von Ablaufverfolgungen“.

<configuration>
   <system.diagnostics>
      <sources>
         <source name="System.ServiceModel"
                    switchValue="Information, ActivityTracing"
                    propagateActivity="true">
            <listeners>
               <add name="traceListener"
                   type="System.Diagnostics.XmlWriterTraceListener"
                   initializeData= "c:\log\Traces.svclog" />
            </listeners>
         </source>
      </sources>
   </system.diagnostics>
</configuration>

Hinweis

Um die Konfigurationsdatei eines WCF-Dienstprojekts in Visual Studio zu bearbeiten, klicken Sie mit der rechten Maustaste auf die Konfigurationsdatei der Anwendung – entweder Web.config für webgehostete Anwendungen oder Appname.exe.config für selbst gehostete Anwendung im Projektmappen-Explorer. Wählen Sie dann das Kontextmenüelement " WCF-Konfiguration bearbeiten " aus. Dadurch wird das Konfigurations-Editor-Tool (SvcConfigEditor.exe) gestartet, mit dem Sie Konfigurationseinstellungen für WCF-Dienste mithilfe einer grafischen Benutzeroberfläche ändern können.

Konfigurieren von Ablaufverfolgungsquellen zum Ausgeben von Ablaufverfolgungen

WCF definiert eine Ablaufverfolgungsquelle für jede Assembly. Innerhalb einer Assembly generierte Ablaufverfolgungen werden von den Listenern verwendet, die für diese Quelle definiert sind. Folgende Ablaufverfolgungsquellen sind definiert:

  • System.ServiceModel: Protokolliert alle Phasen der WCF-Verarbeitung, wenn die Konfiguration gelesen wird, wird eine Nachricht im Transport verarbeitet, die Sicherheitsverarbeitung, eine Nachricht wird im Benutzercode verteilt usw.

  • System.ServiceModel.MessageLogging: Protokolliert alle Nachrichten, die über das System fließen.

  • System.IdentityModel.

  • System.ServiceModel.Activation.

  • System.IO.Log: Protokollierung für die .NET Framework-Schnittstelle beim Common Log File System (CLFS).

  • System.Runtime.Serialization: Protokolliert, wenn Objekte gelesen oder geschrieben werden.

  • CardSpace.

Das folgenden Konfigurationsbeispiel veranschaulicht, wie Sie jede Ablaufverfolgungsquelle so konfigurieren können, dass sie den gleichen (freigegebenen) Listener verwendet:

<configuration>
    <system.diagnostics>
        <sources>
            <source name="System.ServiceModel"
                    switchValue="Information, ActivityTracing"
                    propagateActivity="true">
                <listeners>
                    <add name="xml" />
                </listeners>
            </source>
            <source name="CardSpace">
                <listeners>
                    <add name="xml" />
                </listeners>
            </source>
            <source name="System.IO.Log">
                <listeners>
                    <add name="xml" />
                </listeners>
            </source>
            <source name="System.Runtime.Serialization">
                <listeners>
                    <add name="xml" />
                </listeners>
            </source>
            <source name="System.IdentityModel">
                <listeners>
                    <add name="xml" />
                </listeners>
            </source>
        </sources>

        <sharedListeners>
            <add name="xml"
                 type="System.Diagnostics.XmlWriterTraceListener"
                 initializeData="c:\log\Traces.svclog" />
        </sharedListeners>
    </system.diagnostics>
</configuration>

Sie können außerdem benutzerdefinierte Ablaufverfolgungsquellen hinzufügen, um Ablaufverfolgungsquellen im Benutzercode auszugeben (wie im folgenden Code dargestellt):

<system.diagnostics>
   <sources>
       <source name="UserTraceSource" switchValue="Warning, ActivityTracing" >
          <listeners>
              <add name="xml"
                 type="System.Diagnostics.XmlWriterTraceListener"
                 initializeData="C:\logs\UserTraces.svclog" />
          </listeners>
       </source>
   </sources>
   <trace autoflush="true" />
</system.diagnostics>

Weitere Informationen zum Erstellen benutzerdefinierter Ablaufverfolgungsquellen finden Sie unter Erweitern der Ablaufverfolgung.

Konfigurieren von Ablaufverfolgungslistenern zur Verwendung von Ablaufverfolgungen

Zur Laufzeit leitet WCF Ablaufverfolgungsdaten an die Listener weiter, die die Daten verarbeiten. WCF stellt mehrere vordefinierte Listener für System.Diagnostics bereit, die sich im verwendeten Ausgabeformat unterscheiden. Sie können auch benutzerdefinierte Listenertypen hinzufügen.

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 traceListener benannt und den standardmäßigen .NET Framework-Ablaufverfolgungslistener (System.Diagnostics.XmlWriterTraceListener) als Typ hinzugefügt, den wir verwenden möchten. Sie können eine beliebige Anzahl von Ablaufverfolgungs-Listener für jede Quelle hinzufügen. Wenn der Ablaufverfolgungslistener die Ablaufverfolgung an eine Datei sendet, müssen Sie den Speicherort und den Namen der Ausgabedatei in der Konfigurationsdatei angeben. Dies erfolgt durch das Festlegen von initializeData auf den Namen der Datei für den Listener. Wenn Sie keinen Dateinamen angeben, wird ein zufälliger Dateiname basierend auf dem verwendeten Listenertyp generiert. Wird XmlWriterTraceListener dieser Parameter verwendet, wird ein Dateiname ohne Erweiterung generiert. Wenn Sie einen benutzerdefinierten Listener implementieren, können Sie dieses Attribut auch verwenden, um andere Initialisierungsdaten als einen Dateinamen zu empfangen. Sie können z. B. einen Datenbankbezeichner für dieses Attribut angeben.

Sie können einen benutzerdefinierten Trace Listener so konfigurieren, dass er Traces über das Netzwerk senden kann, z. B. an eine Remotedatenbank. Stellen Sie beim Bereitstellen von Anwendungen eine ordnungsgemäße Zugriffsteuerung für die Protokolle auf dem Remotecomputer sicher.

Sie können einen Ablaufverfolgungslistener auch programmgesteuert konfigurieren. Weitere Informationen finden Sie unter So erstellen und initialisieren Sie Trace-Listener und Erstellen eines benutzerdefinierten TraceListeners.

Vorsicht

Da System.Diagnostics.XmlWriterTraceListener nicht threadsicher ist, werden Ressourcen durch die Ablaufverfolgungsquelle bei der Ausgabe von Ablaufverfolgungen möglicherweise exklusiv gesperrt. Wenn viele Threads Ablaufverfolgungen an eine Ablaufverfolgungsquelle ausgeben, die für die Verwendung dieses Listeners konfiguriert ist, kann ein Ressourcenkonflikt auftreten, was ein erhebliches Leistungsproblem verursacht. Um dieses Problem zu beheben, sollten Sie einen benutzerdefinierten Listener implementieren, der threadsicher ist.

Ablaufverfolgungsebene

Die Ablaufverfolgungsebene wird von der switchValue-Einstellung der Ablaufverfolgungsquelle gesteuert. Die verfügbaren Ablaufverfolgungsebenen werden in der folgenden Tabelle beschrieben.

Ablaufverfolgungsebene Art der nachverfolgten Ereignisse Inhalt der nachverfolgten Ereignisse Nachverfolgte Ereignisse Benutzerziel
Aus Nicht verfügbar Nicht verfügbar Keine Ablaufverfolgungen werden ausgegeben. Nicht verfügbar
Kritisch "Negative" Ereignisse: Ereignisse, die auf eine unerwartete Verarbeitung oder eine Fehlerbedingung hinweisen. Unbehandelte Ausnahmen, einschließlich der folgenden, werden protokolliert:

- OutOfMemoryException
- ThreadAbortException (die CLR ruft jeden ThreadAbortExceptionHandler auf)
- StackOverflowException (kann nicht abgefangen werden)
- ConfigurationErrorsException
- SEHException
- Fehler beim Starten der Anwendung
- Failfast-Ereignisse
- System hängt
- Giftnachrichten: Nachrichtenablaufverfolgungen, die dazu führen, dass die Anwendung fehlschlägt.
Administratoren

Anwendungsentwickler
Fehler "Negative" Ereignisse: Ereignisse, die auf eine unerwartete Verarbeitung oder eine Fehlerbedingung hinweisen. Unerwartete Verarbeitung ist aufgetreten. Die Anwendung konnte eine Aufgabe nicht wie erwartet ausführen. Die Anwendung wird jedoch weiterhin ausgeführt. Alle Ausnahmen werden protokolliert. Administratoren

Anwendungsentwickler
Warnung "Negative" Ereignisse: Ereignisse, die auf eine unerwartete Verarbeitung oder eine Fehlerbedingung hinweisen. Ein mögliches Problem ist aufgetreten oder kann auftreten, aber die Anwendung funktioniert weiterhin ordnungsgemäß. Es kann allerdings möglicherweise nicht mehr korrekt funktionieren. – Die Anwendung empfängt mehr Anforderungen als die Drosselungseinstellungen zulassen.
– Die Empfangswarteschlange ist in der Nähe ihrer maximalen konfigurierten Kapazität.
- Ein Timeout wurde überschritten.
- Die Anmeldeinformationen werden abgelehnt.
Administratoren

Anwendungsentwickler
Informationen "Positive" Ereignisse: Ereignisse, die erfolgreiche Meilensteine markieren Wichtige und erfolgreiche Meilensteine der Anwendungsausführung, unabhängig davon, ob die Anwendung ordnungsgemäß funktioniert oder nicht. Im Allgemeinen werden Nachrichten erzeugt, die hilfreich sind, um den Systemstatus zu überwachen und zu diagnostizieren, die Leistung zu messen oder Profile zu erstellen. Sie können solche Informationen für die Kapazitätsplanung und das Leistungsmanagement verwenden:

- Kanäle werden erstellt.
- Endpunktlistener werden erstellt.
- Eine Nachricht tritt in die Transportphase ein oder verlässt sie.
– Sicherheitstoken wird abgerufen.
- Eine Konfigurationseinstellung wird gelesen.
Administratoren

Anwendungsentwickler

Produktentwickler.
Ausführlich "Positive" Ereignisse: Ereignisse, die erfolgreiche Meilensteine markieren. Untergeordnete Ereignisse für Benutzercode und Wartung werden ausgegeben. Im Allgemeinen können Sie diese Ebene für das Debuggen oder die Anwendungsoptimierung verwenden.

- Verstandener Nachrichtenkopf.
Administratoren

Anwendungsentwickler

Produktentwickler.
Aktivitätsverfolgung Ablaufereignisse zwischen Verarbeitungsaktivitäten und Komponenten. Auf dieser Ebene können Administratoren und Entwickler Anwendungen in derselben Anwendungsdomäne korrelieren:

- Ablaufverfolgungen für Aktivitätsgrenzen wie Start/Stopp
- Ablaufverfolgungen für Übertragungen
Alle
Alle Die Anwendung kann ordnungsgemäß funktionieren. Alle Ereignisse werden emittiert. Alle vorherigen Ereignisse. Alle

Die Ebenen von Verbose bis Critical bauen aufeinander auf, d. h. jede Ablaufverfolgungsebene umfasst alle Ebenen darüber, außer der Off-Ebene. Beispielsweise empfängt en Listener, der die Warning-Ebene überwacht, Critical-, Error- and Warning-Ablaufverfolgungen. Die All-Ebene schließt Ereignisse von Verbose- bis Critical- und ActivityTracing-Ereignissen ein.

Vorsicht

Die Ebenen "Information", "Verbose" und "ActivityTracing" generieren eine Vielzahl von Ablaufverfolgungen, was sich negativ auf den Nachrichtendurchsatz auswirken kann, wenn alle verfügbaren Ressourcen des Computers belegt sind.

Konfigurieren der Aktivitätsablaufverfolgung und Weitergabe für die Korrelation

Mit dem für das activityTracing-Attribut angegebenen switchValue-Wert wird die Aktivitätsablaufverfolgung aktiviert, die Ablaufverfolgungen für Aktivitätsgrenzen und Übertragungen innerhalb von Endpunkten ausgibt.

Hinweis

Wenn Sie bestimmte Erweiterungsfunktionen in WCF verwenden, wird möglicherweise eine Ausnahme vom Typ NullReferenceException ausgelöst, wenn die Aktivitätsablaufverfolgung aktiviert ist. Um dieses Problem zu beheben, überprüfen Sie die Konfigurationsdatei der Anwendung und stellen sicher, dass das switchValue-Attribut für die Ablaufverfolgungsquelle nicht auf activityTracing festgelegt wurde.

Das propagateActivity Attribut gibt an, ob die Aktivität an andere Endpunkte weitergegeben werden soll, die an dem Nachrichtenaustausch teilnehmen. Durch Festlegen dieses Werts truekönnen Sie Ablaufverfolgungsdateien, die von zwei Endpunkten generiert wurden, übernehmen und beobachten, wie eine Reihe von Ablaufverfolgungen auf einem Endpunkt zu einer Reihe von Ablaufverfolgungen auf einem anderen Endpunkt fließt.

Weitere Informationen zur Aktivitätsablaufverfolgung und -verteilung finden Sie unter "Verteilung".

Beide booleschen Werte (propagateActivity und ActivityTracing) gelten für die System.ServiceModel-Ablaufverfolgungsquelle. Der ActivityTracing-Wert gilt außerdem für alle Ablaufverfolgungsquellen – einschließlich WCF und benutzerdefinierte Quellen.

Das propagateActivity-Attribut kann nicht bei benutzerdefinierten Ablaufverfolgungsquellen verwendet werden. Stellen Sie bei der Weitergabe der Aktivitäts-ID des Benutzercodes sicher, dass Sie ServiceModel ActivityTracing nicht festlegen, während das Attribut ServiceModel propagateActivity auf true gesetzt bleibt.

Siehe auch