다음을 통해 공유


방법: 추적 소스 생성 및 초기화

업데이트: 2007년 11월

구성 파일을 사용하거나 사용하지 않고 추적 소스를 만들고 초기화할 수 있습니다. 접근 방법으로는 구성 파일을 사용하여 런타임에 추적 소스에 의해 생성되는 추적을 쉽게 재구성하는 것이 좋습니다.

구성 파일을 사용하여 추적 소스를 만들고 초기화하려면

  1. 다음 샘플 코드는 응용 프로그램 구성 파일(2단계에 표시)과 함께 실행할 수 있습니다. 구성 파일은 응용 프로그램이 초기화될 때 추적 소스에 대한 설정을 초기화합니다. 응용 프로그램은 구성 파일에서 설정되는 속성을 동적으로 변경하여 사용자가 지정한 설정을 재정의할 수 있습니다. 예를 들어, 현재의 구성 설정과 관계없이 중대 오류 메시지를 항상 텍스트 파일로 보내도록 할 수 있습니다. 다음 샘플 코드에서는 구성 파일 설정을 재정의하여 중대 오류 메시지가 추적 수신기에 출력되도록 합니다. 응용 프로그램이 실행되는 동안 구성 파일 설정을 변경해도 초기 설정이 변경되지는 않습니다. 초기 설정을 변경하려면 응용 프로그램을 다시 시작하거나 Refresh 메서드를 사용하여 응용 프로그램을 프로그래밍 방식으로 새로 고쳐야 합니다.

    using System;
    using System.Diagnostics;
    using System.Threading;
    
    namespace TraceSourceApp
    {
        class Program
        {
            private static TraceSource mySource = 
                new TraceSource("TraceSourceApp");
            static void Main(string[] args)
            {
                Activity1();
    
                // Change the event type for which tracing occurs.
                // The console trace listener must be specified 
                // in the configuration file. First, save the original
                // settings from the configuration file.
                EventTypeFilter configFilter = 
                    (EventTypeFilter)mySource.Listeners["console"].Filter;
    
                // Then create a new event type filter that ensures 
                // critical messages will be written.
                mySource.Listeners["console"].Filter =
                    new EventTypeFilter(SourceLevels.Critical);
                Activity2();
    
                // Allow the trace source to send messages to listeners 
                // for all event types. This statement will override 
                // any settings in the configuration file.
                mySource.Switch.Level = SourceLevels.All;
    
                // 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.TraceInformation("Informational message.");
            }
            static void Activity3()
            {
                mySource.TraceEvent(TraceEventType.Error, 4, 
                    "Error message.");
                mySource.TraceInformation("Informational message.");
            }
        }
    }
    
  2. 다음 구성 파일을 만들어 코드 예제에서 TraceSourceTraceSourceApp를 초기화합니다. 실행 파일에 의해 호스팅되는 응용 프로그램의 구성 파일은 응용 프로그램과 같은 디렉터리에 위치합니다. 구성 파일의 이름은 응용 프로그램의 이름과 같으며 .config 확장명을 갖습니다. 예를 들어, TraceSourceApp.exe를 TraceSourceApp.exe.config라는 구성 파일과 연결할 수 있습니다. 다음 구성 파일 예제에서는 이전 단계에서 만든 추적 소스에 대해 콘솔 추적 수신기와 텍스트 작성기 추적 수신기를 초기화하는 방법을 보여 줍니다. 추적 수신기의 구성 이외에도 구성 파일은 두 수신기에 대한 필터를 만들고 추적 소스에 대한 소스 스위치를 만듭니다. 추적 수신기를 추가하는 데는 두 가지 방법이 사용됩니다. 즉 수신기를 추적 소스에 직접 추가하는 방법과 수신기를 공유 컬렉션에 추가한 다음 이를 이름별로 추적 소스에 추가하는 방법이 있습니다. 두 수신기에 대해 식별된 필터는 서로 다른 소스 수준으로 초기화됩니다. 이로 인해 일부 메시지가 두 수신기 중 하나에 의해서만 기록됩니다.

    <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="Warning"/>
              </add>
              <add name="myListener"/>
              <remove name="Default"/>
            </listeners>
          </source>
        </sources>
        <switches>
          <add name="sourceSwitch" value="Warning"/>
        </switches>
        <sharedListeners>
          <add name="myListener" 
            type="System.Diagnostics.TextWriterTraceListener" 
            initializeData="myListener.log">
            <filter type="System.Diagnostics.EventTypeFilter" 
              initializeData="Error"/>
          </add>
        </sharedListeners>
      </system.diagnostics>
    </configuration>
    

구성 파일 없이 추적 소스, 수신기 및 필터를 초기화하려면

  • 구성 파일을 사용하지 않고도 코드 전체에 대해 추적 소스를 통해 추적을 계측할 수 있습니다. 이 방법은 권장되는 구현 방법은 아니지만, 상황에 따라 구성 파일에 의존하지 않고 추적하려는 경우가 있을 수 있습니다.

    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();
    
                // Set the filter settings for the 
                // console trace listener.
                mySource.Listeners["console"].Filter =
                    new EventTypeFilter(SourceLevels.Critical);
                Activity2();
    
                // Allow the trace source to send messages to 
                // listeners for all event types. 
                mySource.Switch.Level = SourceLevels.All;
    
                // 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.");
            }
        }
    }
    

참고 항목

참조

TraceSource

TextWriterTraceListener

ConsoleTraceListener

EventTypeFilter

기타 리소스

응용 프로그램 추적 및 조율