Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

TraceSource-Klasse

 

Veröffentlicht: Oktober 2016

Stellt eine Gruppe von Methoden und Eigenschaften bereit, mit denen Anwendungen die Ausführung von Code verfolgen und Ablaufverfolgungsmeldungen ihrer jeweiligen Quelle zuordnen können.

Namespace:   System.Diagnostics
Assembly:  System (in System.dll)

System.Object
  System.Diagnostics.TraceSource

public class TraceSource

NameBeschreibung
System_CAPS_pubmethodTraceSource(String)

Initialisiert eine neue Instanz der TraceSource-Klasse, wobei der angegebene Namen der Quelle verwendet wird.

System_CAPS_pubmethodTraceSource(String, SourceLevels)

Initialisiert eine neue Instanz der TraceSource-Klasse, wobei der angegebene Name der Quelle und die Standardebene der Quelle verwendet werden, auf der die Ablaufverfolgung durchgeführt werden soll.

NameBeschreibung
System_CAPS_pubpropertyAttributes

Ruft die benutzerdefinierten Schalterattribute ab, die in der Anwendungskonfigurationsdatei definiert sind.

System_CAPS_pubpropertyListeners

Ruft die Auflistung der Ablaufverfolgungslistener für die Ablaufverfolgungsquelle ab.

System_CAPS_pubpropertyName

Ruft den Namen der Ablaufverfolgungsquelle ab.

System_CAPS_pubpropertySwitch

Ruft den Wert des Quellschalters ab oder legt diesen fest.

NameBeschreibung
System_CAPS_pubmethodClose()

Schließt alle Ablaufverfolgungslistener in der Auflistung der Ablaufverfolgungslistener.

System_CAPS_pubmethodEquals(Object)

Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist.(Geerbt von „Object“.)

System_CAPS_protmethodFinalize()

Gibt einem Objekt Gelegenheit, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der Garbage Collection freigegeben wird. (Geerbt von „Object“.)

System_CAPS_pubmethodFlush()

Entfernt alle Ablaufverfolgungslistener aus der Auflistung der Ablaufverfolgungslistener.

System_CAPS_pubmethodGetHashCode()

Fungiert als die Standardhashfunktion.(Geerbt von „Object“.)

System_CAPS_protmethodGetSupportedAttributes()

Ruft die von der Ablaufverfolgungsquelle unterstützten benutzerdefinierten Attribute ab.

System_CAPS_pubmethodGetType()

Ruft den Type der aktuellen Instanz ab.(Geerbt von „Object“.)

System_CAPS_protmethodMemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.(Geerbt von „Object“.)

System_CAPS_pubmethodToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.(Geerbt von „Object“.)

System_CAPS_pubmethodTraceData(TraceEventType, Int32, Object)

Schreibt Ablaufverfolgungsdaten in die Ablaufverfolgungslistener der Listeners-Auflistung. Hierbei werden der angegebene Ereignistyp, der Ereignisbezeichner und die angegebenen Ablaufverfolgungsdaten verwendet.

System_CAPS_pubmethodTraceData(TraceEventType, Int32, Object[])

Schreibt Ablaufverfolgungsdaten in die Ablaufverfolgungslistener der Listeners-Auflistung. Hierbei werden der angegebene Ereignistyp, der Ereignisbezeichner und das Array von Ablaufverfolgungsdaten verwendet.

System_CAPS_pubmethodTraceEvent(TraceEventType, Int32)

Schreibt eine Meldung eines Ablaufverfolgungsereignisses in die Ablaufverfolgungslistener der Listeners-Auflistung. Hierbei werden der angegebene Ereignistyp und Ereignisbezeichner verwendet.

System_CAPS_pubmethodTraceEvent(TraceEventType, Int32, String)

Schreibt eine Meldung eines Ablaufverfolgungsereignisses in die Ablaufverfolgungslistener der Listeners-Auflistung. Hierbei werden der angegebene Ereignistyp, der Ereignisbezeichner und die angegebene Meldung verwendet.

System_CAPS_pubmethodTraceEvent(TraceEventType, Int32, String, Object[])

Schreibt ein Ablaufverfolgungsereignis in die Ablaufverfolgungslistener der Listeners-Auflistung. Hierbei werden der angegebene Ereignistyp, der Ereignisbezeichner sowie das angegebene Argumentarray und Format verwendet.

System_CAPS_pubmethodTraceInformation(String)

Schreibt eine Informationsmeldung unter Verwendung der angegebenen Meldung in die Ablaufverfolgungslistener in der Listeners-Auflistung.

System_CAPS_pubmethodTraceInformation(String, Object[])

Schreibt eine Informationsmeldung unter Verwendung des angegebenen Objektarrays und der Formatierungsinformationen in die Ablaufverfolgungslistener in der Listeners-Auflistung.

System_CAPS_pubmethodTraceTransfer(Int32, String, Guid)

Schreibt eine Meldung der Ablaufverfolgungsübertragung in die Ablaufverfolgungslistener der Listeners-Auflistung. Hierbei werden der angegebene numerische Bezeichner, die Meldung und der verwandte Aktivitätsbezeichner verwendet.

The T:System.Diagnostics.TraceSource class is used by applications to produce traces that can be associated with the application. T:System.Diagnostics.TraceSource provides tracing methods that allow you to easily trace events, trace data, and issue informational traces. Trace output from T:System.Diagnostics.TraceSource can be controlled by configuration file settings. The configuration file is located in the folder with the application executable and has the name of the application with the .config file name extension added. For example, the name of the configuration file for TraceSourceSample.exe is TraceSourceSample.exe.config. The configuration file can be used to determine where the trace information is to be sent and what levels of activity are to be traced. The following example shows the contents of a sample application configuration file.

<configuration>
  <system.diagnostics>
    <sources>
      <source name="TraceTest" switchName="SourceSwitch" 
        switchType="System.Diagnostics.SourceSwitch" >
        <listeners>
          <add name="console" />
          <remove name ="Default" />
        </listeners>
      </source>
    </sources>
    <switches>
      <!-- You can set the level at which tracing is to occur -->
      <add name="SourceSwitch" value="Warning" />
        <!-- You can turn tracing off -->
        <!--add name="SourceSwitch" value="Off" -->
    </switches>
    <sharedListeners>
      <add name="console" 
        type="System.Diagnostics.ConsoleTraceListener" 
        initializeData="false"/>
    </sharedListeners>
    <trace autoflush="true" indentsize="4">
      <listeners>
        <add name="console" />
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

The T:System.Diagnostics.TraceSource class is identified by the name of a source, typically the name of the application. The trace messages coming from a particular component can be initiated by a particular trace source, allowing all messages coming from that component to be easily identified.

TraceSource defines tracing methods but does not actually provide any specific mechanism for generating and storing tracing data. The tracing data is produced by trace listeners, which are plug-ins that can be loaded by trace sources.

System_CAPS_noteHinweis

You should not call the tracing methods during finalization. Doing so can result in an T:System.ObjectDisposedException being thrown.

You can customize the tracing output's target by adding or removing T:System.Diagnostics.TraceListener instances to or from the collection stored in the P:System.Diagnostics.TraceSource.Listeners property. By default, trace output is produced using an instance of the T:System.Diagnostics.DefaultTraceListener class. The preceding configuration file example demonstrates removing the T:System.Diagnostics.DefaultTraceListener and adding a T:System.Diagnostics.ConsoleTraceListener to produce the trace output for the trace source. For more information, see <listeners> Element for <source> and <sharedListeners> Element.

System_CAPS_noteHinweis

Adding a trace listener to the P:System.Diagnostics.TraceSource.Listeners collection can cause an exception to be thrown while tracing, if a resource used by the trace listener is not available. The conditions and the exception thrown depend on the trace listener and cannot be enumerated in this topic. It may be useful to place calls to the T:System.Diagnostics.TraceSource methods in try/catch blocks to detect and handle any exceptions from trace listeners.

The T:System.Diagnostics.SourceSwitch class provides the means to dynamically control the tracing output. The preceding configuration file example shows how you can turn off tracing from a trace source and control the level at which tracing occurs. You can modify the value of the source switch without recompiling your application. For information on using the configuration file to set a switch, see T:System.Diagnostics.Switch and How to: Configure Trace Switches.

System_CAPS_noteHinweis

If you modify a configuration file while an application is executing, the application must be stopped and restarted or the M:System.Diagnostics.Trace.Refresh method must be called before the new settings take effect.

The T:System.Diagnostics.TraceEventType enumeration is used to define the event type of the trace message. Trace filters use the T:System.Diagnostics.TraceEventType to determine if a trace listener should produce the trace message.

The trace listeners can optionally have an additional layer of filtering through a trace filter. If a trace listener has an associated filter, the listener calls the M:System.Diagnostics.TraceFilter.ShouldTrace(System.Diagnostics.TraceEventCache,System.String,System.Diagnostics.TraceEventType,System.Int32,System.String,System.Object[],System.Object,System.Object[]) method on that filter to determine whether or not to produce the trace information.

The trace listeners use the values of the T:System.Diagnostics.Trace class properties M:System.Diagnostics.Trace.Indent, P:System.Diagnostics.Trace.IndentSize, and P:System.Diagnostics.Trace.AutoFlush to format trace output. You can use configuration file attributes to set the M:System.Diagnostics.Trace.Indent, P:System.Diagnostics.Trace.IndentSize, and P:System.Diagnostics.Trace.AutoFlush properties. The following example sets the P:System.Diagnostics.Trace.AutoFlush property to false and the P:System.Diagnostics.Trace.IndentSize property to 3.

<configuration>
  <system.diagnostics>
    <trace autoflush="false" indentsize="3" />
  </system.diagnostics>
</configuration>

The following code example shows the use of the T:System.Diagnostics.TraceSource class to forward traces to listeners. The example also demonstrates switch and filter usage.

// The following configuration file can be used with this sample.
// When using a configuration file #define ConfigFile.
//<configuration>
//    <system.diagnostics>
//        <sources>
//            <source name="TraceTest" switchName="SourceSwitch" switchType="System.Diagnostics.SourceSwitch" >
//                <listeners>
//                    <add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false" />
//                    <remove name ="Default" />
//                </listeners>
//            </source>
//        </sources>
//        <switches>
//            <!-- You can set the level at which tracing is to occur -->
//            <add name="SourceSwitch" value="Warning" />
//            <!-- You can turn tracing off -->
//            <!--add name="SourceSwitch" value="Off" -->
//        </switches>
//        <trace autoflush="true" indentsize="4"></trace>
//    </system.diagnostics>
//</configuration>
#define TRACE
//#define ConfigFile

using System;
using System.Collections;
using System.Diagnostics;
using System.Reflection;
using System.IO;
using System.Security.Permissions;

namespace Testing
{
    class TraceTest
    {
        // Initialize the trace source.
        static TraceSource ts = new TraceSource("TraceTest");
        [SwitchAttribute("SourceSwitch", typeof(SourceSwitch))]
        static void Main()
        {
            try
            {
                // Initialize trace switches.
#if(!ConfigFile)
                SourceSwitch sourceSwitch = new SourceSwitch("SourceSwitch", "Verbose");
                ts.Switch = sourceSwitch;
                int idxConsole = ts.Listeners.Add(new System.Diagnostics.ConsoleTraceListener());
                ts.Listeners[idxConsole].Name = "console";
#endif
                DisplayProperties(ts);
                ts.Listeners["console"].TraceOutputOptions |= TraceOptions.Callstack;
                ts.TraceEvent(TraceEventType.Warning, 1);
                ts.Listeners["console"].TraceOutputOptions = TraceOptions.DateTime;
                // Issue file not found message as a warning.
                ts.TraceEvent(TraceEventType.Warning, 2, "File Test not found");
                // Issue file not found message as a verbose event using a formatted string.
                ts.TraceEvent(TraceEventType.Verbose, 3, "File {0} not found.", "test");
                // Issue file not found message as information.
                ts.TraceInformation("File {0} not found.", "test");
                ts.Listeners["console"].TraceOutputOptions |= TraceOptions.LogicalOperationStack;
                // Issue file not found message as an error event.
                ts.TraceEvent(TraceEventType.Error, 4, "File {0} not found.", "test");
                // Test the filter on the ConsoleTraceListener.
                ts.Listeners["console"].Filter = new SourceFilter("No match");
                ts.TraceData(TraceEventType.Error, 5,
                    "SourceFilter should reject this message for the console trace listener.");
                ts.Listeners["console"].Filter = new SourceFilter("TraceTest");
                ts.TraceData(TraceEventType.Error, 6,
                    "SourceFilter should let this message through on the console trace listener.");
                ts.Listeners["console"].Filter = null;
                // Use the TraceData method. 
                ts.TraceData(TraceEventType.Warning, 7, new object());
                ts.TraceData(TraceEventType.Warning, 8, new object[] { "Message 1", "Message 2" });
                // Activity tests.
                ts.TraceEvent(TraceEventType.Start, 9, "Will not appear until the switch is changed.");
                ts.Switch.Level = SourceLevels.ActivityTracing | SourceLevels.Critical;
                ts.TraceEvent(TraceEventType.Suspend, 10, "Switch includes ActivityTracing, this should appear");
                ts.TraceEvent(TraceEventType.Critical, 11, "Switch includes Critical, this should appear");
                ts.Flush();
                ts.Close();
                Console.WriteLine("Press any key to exit.");
                Console.Read();
            }
            catch (Exception e)
            {
                // Catch any unexpected exception.
                Console.WriteLine("Unexpected exception: " + e.ToString());
                Console.Read();
            }
        }
        public static void DisplayProperties(TraceSource ts)
        {
            Console.WriteLine("TraceSource name = " + ts.Name);
            Console.WriteLine("TraceSource switch level = " + ts.Switch.Level);
            Console.WriteLine("TraceSource switch = " + ts.Switch.DisplayName);
            SwitchAttribute[] switches = SwitchAttribute.GetAll(typeof(TraceTest).Assembly);
            for (int i = 0; i < switches.Length; i++)
            {
                Console.WriteLine("Switch name = " + switches[i].SwitchName);
                Console.WriteLine("Switch type = " + switches[i].SwitchType);
            }
#if(ConfigFile)
            // Get the custom attributes for the TraceSource.
            Console.WriteLine("Number of custom trace source attributes = "
                + ts.Attributes.Count);
            foreach (DictionaryEntry de in ts.Attributes)
                Console.WriteLine("Custom trace source attribute = "
                    + de.Key + "  " + de.Value);
            // Get the custom attributes for the trace source switch.
            foreach (DictionaryEntry de in ts.Switch.Attributes)
                Console.WriteLine("Custom switch attribute = "
                    + de.Key + "  " + de.Value);
#endif
            Console.WriteLine("Number of listeners = " + ts.Listeners.Count);
            foreach (TraceListener traceListener in ts.Listeners)
            {
                Console.Write("TraceListener: " + traceListener.Name + "\t");
                // The following output can be used to update the configuration file.
                Console.WriteLine("AssemblyQualifiedName = " +
                    (traceListener.GetType().AssemblyQualifiedName));
            }
        }
    }
}

.NET Framework
Verfügbar seit 2.0

This type is thread safe.

Zurück zum Anfang
Anzeigen: