Freigeben ü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 zu den Einstellungen der Ablaufverfolgung in einer Produktions- oder Debugumgebung finden Sie unter Empfohlene Einstellungen für Ablaufverfolgung und Nachrichtenprotokollierung.

Aktivieren der Ablaufverfolgung

Windows Communication Foundation (WCF) gibt die folgenden Daten zur Diagnoseablaufverfolgung aus:

  • Ablaufverfolgungen für Verarbeitungsmeilensteine in allen Komponenten der Anwendungen, beispielsweise Operationsaufrufe, Codeausnahmen, Warnungen und andere wichtige Verarbeitungsereignisse.
  • Windows-Fehlerereignisse bei Fehlern des Ablaufverfolgungsfeatures. Siehe Ereignisprotokollierung.

Die WCF-Ablaufverfolgung basiert auf System.Diagnostics. Definieren Sie in der Konfigurationsdatei oder im Code Ablaufverfolgungsquellen, wenn Sie die Ablaufverfolgung verwenden möchten. 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 zum Eintreten/Verlassen des Benutzercodes auf. Die System.ServiceModel.MessageLogging-Ablaufverfolgungsquelle zeichnet alle Nachrichten auf, die das System durchlaufen.

Die Ablaufverfolgung ist standardmäßig nicht aktiviert. Um die Ablaufverfolgung zu aktivieren, müssen Sie einen Ablaufverfolgungslistener erstellen und eine andere Ablaufverfolgungsebene als "Off" 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.

Sie können die Ablaufverfolgung mit der Konfigurationsdatei der Anwendung konfigurieren: entweder mit Web.config für im Web gehostete Anwendungen oder mit Appname.exe.config für selbst gehostete Anwendungen. Beachten Sie folgendes Beispiel.

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

Tipp

Klicken Sie zum Bearbeiten der Konfigurationsdatei eines WCF-Dienstprojekts unter Visual Studio im Projektmappen-Explorer mit der rechten Maustaste auf die entsprechende Datei, und wählen Sie im Kontextmenü die Option WCF-Konfiguration bearbeiten aus. Das Configuration Editor Tool (SvcConfigEditor.exe) wird gestartet und ermöglicht das Ändern der Konfigurationseinstellungen für WCF-Dienste mithilfe einer grafischen Benutzeroberfläche.

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 Stufen der WCF-Verarbeitung, jedes Lesen der Konfiguration, Verarbeiten einer Nachricht beim Transport, jede Sicherheitsverarbeitung, das Senden einer Nachricht im Benutzercode usw.
  • System.ServiceModel.MessageLogging: Protokolliert alle Nachrichten, die das System durchlaufen.
  • System.IdentityModel.
  • System.ServiceModel.Activation.
  • System.IO.Log: Protokollierung für die .NET Framework-Schnittstelle im gemeinsamen Protokolldateisystem (Common Log File System, CLFS).
  • System.Runtime.Serialization: Protokolliert das Lesen oder Schreiben von Objekten.
  • 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 Extending Tracing.

Konfigurieren von Ablaufverfolgungslistenern zur Verwendung von Ablaufverfolgungen

WCF übergibt während der Laufzeit Ablaufverfolgungsdaten an die Listener, die die Daten verarbeiten. WCF stellt verschiedene vordefinierte Listener für System.Diagnostics bereit. Diese Listener unterscheiden sich im Format, das für die Ausgabe verwendet wird. 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 genannt und den standardmäßigen .NET Framework-Ablaufverfolgungslistener (System.Diagnostics.XmlWriterTraceListener) als zu verwendenden Typ angegeben. Sie können jeder Quelle beliebig viele Ablaufverfolgungslistener hinzufügen. Wenn der Ablaufverfolgungslistener die Ablaufverfolgung an eine Datei ausgibt, müssen Sie den Speicherort der Ausgabedatei angeben und sie in der Konfigurationsdatei benennen. Legen Sie dazu initializeData auf den Namen der Datei für diesen Listener fest. Wenn Sie keinen Dateinamen angeben, wird basierend auf dem verwendeten Listenertyp ein beliebiger Dateiname generiert. Wenn XmlWriterTraceListener verwendet wird, wird ein Dateiname ohne Erweiterung generiert. Beim Implementieren eines benutzerdefinierten Listeners können Sie dieses Attribut auch verwenden, um andere Initialisierungsdaten als den Dateinamen zu erhalten. Sie können für dieses Attribut z. B. einen Datenbankbezeichner angeben.

Sie können einen benutzerdefinierten Ablaufverfolgungslistener konfigurieren, um Ablaufverfolgungen zu übertragen, 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 Gewusst wie: Erstellen und Initialisieren von Ablaufverfolgungslistenern (möglicherweise in englischer Sprache) und Erstellen eines benutzerdefinierten Ablaufverfolgungslisteners (möglicherweise in englischer Sprache).

Warnung

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, treten möglicherweise Ressourcenkonflikte auf. Das kann die Leistung erheblich beeinträchtigen. Implementieren Sie einen threadsicheren benutzerdefinierten Listener, um dieses Problem zu beheben.

Ablaufverfolgungsebene

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

Ablaufverfolgungsebene Art der verfolgten Ereignisse Inhalt der verfolgten Ereignisse Verfolgte Ereignisse Zielgruppe

Off

Nicht zutreffend

Nicht zutreffend

Keine Ablaufverfolgungen werden ausgegeben.

Nicht zutreffend

Critical

"Negative" Ereignisse: Ereignisse, die eine unerwartete Verarbeitung oder eine Fehlerbedingung angeben.

Nicht behandelte Ausnahmen (einschließlich der folgenden) werden protokolliert:

  • OutOfMemoryException
  • ThreadAbortException (die CLR ruft jeden ThreadAbortExceptionHandler auf)
  • StackOverflowException (kann nicht abgefangen werden)
  • ConfigurationErrorsException
  • SEHException
  • Startfehler der Anwendung
  • Failfast-Ereignisse
  • Systemfehler
  • Nicht verarbeitbare Nachrichten: Nachrichtenablaufverfolgungen, die Anwendungsfehler verursachen.

Administratoren

Anwendungsentwickler

Fehler

"Negative" Ereignisse: Ereignisse, die eine unerwartete Verarbeitung oder eine Fehlerbedingung angeben.

Eine unerwartete Verarbeitung ist aufgetreten. Die Anwendung konnte die Aufgabe nicht wie erwartet ausführen. Die Anwendung wird jedoch weiter ordnungsgemäß ausgeführt.

Alle Ausnahmen werden protokolliert.

Administratoren

Anwendungsentwickler

Warnung

"Negative" Ereignisse: Ereignisse, die eine unerwartete Verarbeitung oder eine Fehlerbedingung angeben.

Ein mögliches Problem ist aufgetreten oder tritt möglicherweise auf, die Anwendung funktioniert jedoch noch ordnungsgemäß. Allerdings ist nicht sicher, dass sie weiterhin ordnungsgemäß ausgeführt wird.

  • Die Anwendung empfängt mehr Anforderungen, als die Drosselungseinstellungen zulassen.
  • Die empfangende Warteschlange hat nahezu die maximal konfigurierte Kapazität erreicht.
  • Eine Zeitüberschreitung ist eingetreten.
  • Die Anmeldeinformationen werden abgelehnt.

Administratoren

Anwendungsentwickler

Information

"Positive" Ereignisse: Ereignisse, die erfolgreiche Meilensteine kennzeichnen.

Wichtige und erfolgreiche Meilensteine der Anwendungsausführung, unabhängig davon, ob die Anwendung ordnungsgemäß funktioniert.

In der Regel werden Meldungen generiert, die bei der Überwachung und Diagnose des Systemstatus, der Leistungsmessung oder Profilerstellung nützlich sind. Solche Informationen können zur Kapazitätsplanung und Leistungsverwaltung genutzt werden:

  • Kanäle werden erstellt.
  • Endpunktlistener werden erstellt.
  • Eine Nachricht tritt in den Transport ein oder verlässt den Transport.
  • Ein Sicherheitstoken wird abgerufen.
  • Eine Konfigurationseinstellung wird gelesen.

Administratoren

Anwendungsentwickler

Produktentwickler

Verbose

"Positive" Ereignisse: Ereignisse, die erfolgreiche Meilensteine kennzeichnen.

Ereignisse auf niedriger Ebene werden für Benutzercode und Dienste ausgegeben.

Im Allgemeinen können Sie diese Ebene zum Debuggen oder zur Anwendungsoptimierung verwenden.

  • Verstandener Nachrichtenheader.

Administratoren

Anwendungsentwickler

Produktentwickler

ActivityTracing

Ablaufereignisse zwischen Verarbeitungsaktivitäten und Komponenten.

Diese Ebene ermöglicht es Administratoren und Entwicklern, Anwendungen in einer Anwendungsdomäne zu korrelieren:

  • Ablaufverfolgungen für Aktivitätsgrenzen wie Start/Stopp.
  • Ablaufverfolgungen für Übertragungen.

All

All

Die Anwendung funktioniert möglicherweise ordnungsgemäß. Alle Ereignisse werden ausgegeben.

Alle vorherigen Ereignisse.

All

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.

Warnung

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 switchValue-Attribut angegebenen activityTracing-Wert wird die Aktivitätsablaufverfolgung aktiviert, die Ablaufverfolgungen für Aktivitätsgrenzen und Übertragungen innerhalb von Endpunkten ausgibt.

Tipp

Wenn Sie bestimmte Erweiterungsfeatures in WCF verwenden, wird möglicherweise eine Ausnahme des Typs 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. Wenn Sie diesen Wert auf true festlegen, können Sie anhand von Ablaufverfolgungsdateien, die durch zwei Endpunkte generiert wurden, feststellen, wie eine Reihe von Ablaufverfolgungen an einem Endpunkt zu einer Reihe von Ablaufverfolgungen an einem anderen Endpunkt übergegangen sind.

Weitere Informationen zur Aktivitätsablaufverfolgung und Weitergabe finden Sie unter Aktivitätsablaufverfolgung und Weitergabe für End-to-End-Ablaufverfolgungskorrelation.

Beide boolesche Werte propagateActivity und ActivityTracing gelten für die System.ServiceModel-Ablaufverfolgungsquelle. Der ActivityTracing -Wert gilt außerdem für alle Ablaufverfolgungsquellen, einschließlich der von WCF und benutzerdefinierte Quellen.

Das propagateActivity-Attribut kann nicht bei benutzerdefinierten Ablaufverfolgungsquellen verwendet werden. Stellen Sie bei der Aktivitäts-ID-Weitergabe in Benutzercode sicher, dass Sie ActivityTracing von ServiceModel nicht festlegen, während das propagateActivity-Attribute von ServiceModel noch auf true festgelegt ist.

Siehe auch

Konzepte

Verwaltung und Diagnose

Weitere Ressourcen

Ablaufverfolgung
Gewusst wie: Erstellen und Initialisieren von (möglicherweise in englischer Sprache)
Erstellen eines benutzerdefinierten Ablaufverfolgungslisteners (möglicherweise in englischer Sprache)