Bagikan melalui


Cara: Membuat dan Menginisialisasi Sumber Jejak

Catatan

Artikel ini khusus untuk .NET Framework. Ini tidak berlaku untuk implementasi .NET yang lebih baru, termasuk .NET 6 dan versi yang lebih baru.

Kelas TraceSource digunakan oleh aplikasi untuk menghasilkan jejak yang dapat dikaitkan dengan aplikasi. TraceSource menyediakan metode penelusuran yang memungkinkan Anda melacak peristiwa, melacak data, dan mengeluarkan jejak informasi dengan mudah. Output jejak dari TraceSource dapat dibuat dan diinisialisasi dengan atau tanpa menggunakan file konfigurasi. Topik ini memberikan instruksi untuk kedua opsi. Namun, kami menyarankan Anda menggunakan file konfigurasi untuk memfasilitasi konfigurasi ulang jejak yang dihasilkan oleh sumber jejak pada durasi.

Untuk membuat dan menginisialisasi sumber jejak menggunakan file konfigurasi

  1. Buat proyek aplikasi konsol Visual Studio (.NET Framework) dan ganti kode yang disediakan dengan kode berikut. Kode ini mencatat kesalahan dan peringatan dan mengeluarkan beberapa di antaranya ke konsol, dan beberapa lainnya ke file myListener yang dibuat oleh entri dalam file konfigurasi.

    using System;
    using System.Diagnostics;
    
    class TraceTest
    {
    
        private static TraceSource mySource =
                new TraceSource("TraceSourceApp");
            static void Main(string[] args)
            {
               // Issue an error and a warning message. Only the error message
                // should be logged.
                Activity1();
    
                // Save the original settings from the configuration file.
                EventTypeFilter configFilter =
                    (EventTypeFilter)mySource.Listeners["console"].Filter;
    
                // Create a new event type filter that ensures
                // warning messages will be written.
                mySource.Listeners["console"].Filter =
                    new EventTypeFilter(SourceLevels.Warning);
    
                // Allow the trace source to send messages to listeners
                // for all event types. This statement will override
                // any settings in the configuration file.
                // If you do not change the switch level, the event filter
                // changes have no effect.
                mySource.Switch.Level = SourceLevels.All;
    
                // Issue a warning and a critical message. Both should be logged.
                Activity2();
    
                // Restore the original filter settings.
                mySource.Listeners["console"].Filter = configFilter;
                Activity3();
                mySource.Close();
                return;
            }
            static void Activity1()
            {
                mySource.TraceEvent(TraceEventType.Error, 1,
                    "Error message.");
                mySource.TraceEvent(TraceEventType.Warning, 2,
                    "Warning message.");
            }
            static void Activity2()
            {
                mySource.TraceEvent(TraceEventType.Critical, 3,
                    "Critical message.");
                mySource.TraceEvent(TraceEventType.Warning, 2,
                    "Warning message.");
            }
            static void Activity3()
            {
                mySource.TraceEvent(TraceEventType.Error, 4,
                    "Error message.");
                mySource.TraceInformation("Informational message.");
            }
        }
    
    Imports System.Diagnostics
    
    Class TraceTest
    
        Private Shared mySource As New TraceSource("TraceSourceApp")
    
        Shared Sub Main(ByVal args() As String)
            ' Issue an error and a warning message. Only the error message
            ' should be logged.
            Activity1()
    
            ' Save the original settings from the configuration file.
            Dim configFilter As EventTypeFilter = CType(mySource.Listeners("console").Filter, EventTypeFilter)
    
            ' Create a new event type filter that ensures 
            ' warning messages will be written.
            mySource.Listeners("console").Filter = New EventTypeFilter(SourceLevels.Warning)
    
            ' Allow the trace source to send messages to listeners 
            ' for all event types. This statement will override 
            ' any settings in the configuration file.
            ' If you do not change the switch level, the event filter
            ' changes have no effect.
            mySource.Switch.Level = SourceLevels.All
    
            ' Issue a warning and a critical message. Both should be logged.
            Activity2()
    
            ' Restore the original filter settings.
            mySource.Listeners("console").Filter = configFilter
            Activity3()
            mySource.Close()
            Return
    
        End Sub
    
        Shared Sub Activity1()
            mySource.TraceEvent(TraceEventType.Error, 1, "Error message.")
            mySource.TraceEvent(TraceEventType.Warning, 2, "Warning message.")
    
        End Sub
    
        Shared Sub Activity2()
            mySource.TraceEvent(TraceEventType.Critical, 3, "Critical message.")
            mySource.TraceEvent(TraceEventType.Warning, 2, "Warning message.")
    
        End Sub
    
        Shared Sub Activity3()
            mySource.TraceEvent(TraceEventType.Error, 4, "Error message.")
            mySource.TraceInformation("Informational message.")
    
        End Sub
    End Class
    
  2. Tambahkan file konfigurasi aplikasi, jika tidak ada, ke proyek untuk menginisialisasi sumber jejak bernama TraceSourceApp dalam contoh kode di langkah 1.

  3. Ganti konten file konfigurasi default dengan pengaturan berikut untuk menginisialisasi pendengar pelacakan konsol dan pendengar pelacakan penulis teks untuk sumber pelacakan yang dibuat di langkah 1.

    <configuration>
      <system.diagnostics>
        <sources>
          <source name="TraceSourceApp"
            switchName="sourceSwitch"
            switchType="System.Diagnostics.SourceSwitch">
            <listeners>
              <add name="console"
                type="System.Diagnostics.ConsoleTraceListener">
                <filter type="System.Diagnostics.EventTypeFilter"
                  initializeData="Error"/>
              </add>
              <add name="myListener"/>
              <remove name="Default"/>
            </listeners>
          </source>
        </sources>
        <switches>
          <add name="sourceSwitch" value="Error"/>
        </switches>
        <sharedListeners>
          <add name="myListener"
            type="System.Diagnostics.TextWriterTraceListener"
            initializeData="myListener.log">
            <filter type="System.Diagnostics.EventTypeFilter"
              initializeData="Error"/>
          </add>
        </sharedListeners>
      </system.diagnostics>
    </configuration>
    

    Selain mengonfigurasi pemroses pelacakan, file konfigurasi membuat filter untuk kedua pemroses dan membuat sakelar sumber untuk sumber pelacakan. Dua teknik ditampilkan untuk menambahkan pemroses pelacakan: menambahkan pemroses secara langsung ke sumber pelacakan dan menambahkan pemroses ke koleksi pemroses bersama, lalu menambahkannya dengan nama ke sumber pelacakan. Filter yang diidentifikasi untuk dua pendengar diinisialisasi dengan tingkat sumber yang berbeda. Hal ini menyebabkan beberapa pesan hanya ditulis oleh salah satu dari dua pendengar.

    File konfigurasi menginisialisasi pengaturan untuk sumber jejak pada saat aplikasi diinisialisasi. Aplikasi dapat secara dinamis mengubah properti yang diatur oleh file konfigurasi untuk menimpa pengaturan apa pun yang ditentukan oleh pengguna. Misalnya, Anda mungkin ingin memastikan bahwa pesan penting selalu dikirim ke file teks, terlepas dari pengaturan konfigurasi saat ini. Kode contoh menunjukkan cara mengganti pengaturan file konfigurasi untuk memastikan bahwa pesan penting dikeluarkan ke pemroses pelacakan.

    Mengubah pengaturan file konfigurasi saat aplikasi sedang dijalankan tidak mengubah pengaturan awal. Untuk mengubah pengaturan, Anda harus memulai ulang aplikasi atau menyegarkan aplikasi secara terprogram menggunakan metode Trace.Refresh.

Untuk menginisialisasi sumber pelacakan, pendengar, dan filter tanpa file konfigurasi

  • Gunakan kode contoh berikut untuk mengaktifkan pelacakan melalui sumber pelacakan tanpa menggunakan file konfigurasi. Ini bukan praktik yang disarankan, tetapi mungkin ada keadaan ketika Anda tidak ingin bergantung pada file konfigurasi untuk memastikan pelacakan.

    using System;
    using System.Diagnostics;
    using System.Threading;
    
    namespace TraceSourceApp
    {
        class Program
        {
            private static TraceSource mySource =
                new TraceSource("TraceSourceApp");
            static void Main(string[] args)
            {
                mySource.Switch = new SourceSwitch("sourceSwitch", "Error");
                mySource.Listeners.Remove("Default");
                TextWriterTraceListener textListener =
                    new TextWriterTraceListener("myListener.log");
                ConsoleTraceListener console =
                    new ConsoleTraceListener(false);
                console.Filter =
                    new EventTypeFilter(SourceLevels.Information);
                console.Name = "console";
                textListener.Filter =
                    new EventTypeFilter(SourceLevels.Error);
                mySource.Listeners.Add(console);
                mySource.Listeners.Add(textListener);
                Activity1();
    
                // Allow the trace source to send messages to
                // listeners for all event types. Currently only
                // error messages or higher go to the listeners.
                // Messages must get past the source switch to
                // get to the listeners, regardless of the settings
                // for the listeners.
                mySource.Switch.Level = SourceLevels.All;
    
                // Set the filter settings for the
                // console trace listener.
                mySource.Listeners["console"].Filter =
                    new EventTypeFilter(SourceLevels.Critical);
                Activity2();
    
                // Change the filter settings for the console trace listener.
                mySource.Listeners["console"].Filter =
                    new EventTypeFilter(SourceLevels.Information);
                Activity3();
                mySource.Close();
                return;
            }
            static void Activity1()
            {
                mySource.TraceEvent(TraceEventType.Error, 1,
                    "Error message.");
                mySource.TraceEvent(TraceEventType.Warning, 2,
                    "Warning message.");
            }
            static void Activity2()
            {
                mySource.TraceEvent(TraceEventType.Critical, 3,
                    "Critical message.");
                mySource.TraceInformation("Informational message.");
            }
            static void Activity3()
            {
                mySource.TraceEvent(TraceEventType.Error, 4,
                    "Error message.");
                mySource.TraceInformation("Informational message.");
            }
        }
    }
    
    
    Imports System.Diagnostics
    Imports System.Threading
    
    
    
    Class Program
        Private Shared mySource As New TraceSource("TraceSourceApp")
    
        Shared Sub Main(ByVal args() As String)
            mySource.Switch = New SourceSwitch("sourceSwitch", "Error")
            mySource.Listeners.Remove("Default")
            Dim textListener As New TextWriterTraceListener("myListener.log")
            Dim console As New ConsoleTraceListener(False)
            console.Filter = New EventTypeFilter(SourceLevels.Information)
            console.Name = "console"
            textListener.Filter = New EventTypeFilter(SourceLevels.Error)
            mySource.Listeners.Add(console)
            mySource.Listeners.Add(textListener)
            Activity1()
    
            ' Allow the trace source to send messages to 
            ' listeners for all event types. Currently only 
            ' error messages or higher go to the listeners.
            ' Messages must get past the source switch to 
            ' get to the listeners, regardless of the settings 
            ' for the listeners.
            mySource.Switch.Level = SourceLevels.All
    
            ' Set the filter settings for the 
            ' console trace listener.
            mySource.Listeners("console").Filter = New EventTypeFilter(SourceLevels.Critical)
            Activity2()
    
            ' Change the filter settings for the console trace listener.
            mySource.Listeners("console").Filter = New EventTypeFilter(SourceLevels.Information)
            Activity3()
            mySource.Close()
            Return
    
        End Sub
    
        Shared Sub Activity1()
            mySource.TraceEvent(TraceEventType.Error, 1, "Error message.")
            mySource.TraceEvent(TraceEventType.Warning, 2, "Warning message.")
    
        End Sub
    
        Shared Sub Activity2()
            mySource.TraceEvent(TraceEventType.Critical, 3, "Critical message.")
            mySource.TraceInformation("Informational message.")
    
        End Sub
    
        Shared Sub Activity3()
            mySource.TraceEvent(TraceEventType.Error, 4, "Error message.")
            mySource.TraceInformation("Informational message.")
    
        End Sub
    End Class
    
    

Lihat juga