다음을 통해 공유


연습: My.Application.Log 출력 필터링

업데이트: 2007년 11월

이 연습에서는 My.Application.Log 개체에 대한 기본 로그 필터링을 변경하고 Log 개체에서 수신기로 전달될 정보와 수신기에서 기록할 정보를 제어하는 방법을 보여 줍니다. 구성 정보는 응용 프로그램의 구성 파일에 저장되므로 로깅 동작은 응용 프로그램을 빌드한 후에도 변경할 수 있습니다.

시작

My.Application.Log에서 쓰는 각 메시지에는 심각도 수준이 연관되어 있으며 필터링 메커니즘에서는 이를 사용하여 로그 출력을 제어합니다. 이 샘플 응용 프로그램에서는 My.Application.Log 메서드를 사용하여 여러 가지 심각도 수준의 로그 메시지를 씁니다.

샘플 응용 프로그램을 빌드하려면

  1. 새 Visual Basic Windows 응용 프로그램 프로젝트를 엽니다.

  2. Button1이라는 이름의 단추를 Form1에 추가합니다.

  3. Button1의 Click 이벤트 처리기에 다음 코드를 추가합니다.

    ' Activity tracing information
    My.Application.Log.WriteEntry("Entering Button1_Click", TraceEventType.Start)
    
    ' Tracing information
    My.Application.Log.WriteEntry("In Button1_Click", TraceEventType.Information)
    
    ' Create an exception to log.
    Dim ex As New ApplicationException
    ' Exception information
    My.Application.Log.WriteException(ex)
    
    ' Activity tracing information
    My.Application.Log.WriteEntry("Leaving Button1_Click", TraceEventType.Stop)
    
  4. 디버거에서 응용 프로그램을 실행합니다.

  5. Button1을 누릅니다.

    응용 프로그램에서 다음 정보를 응용 프로그램의 디버그 출력 및 로그 파일에 씁니다.

    DefaultSource Information: 0 : In Button1_Click

    DefaultSource Error: 2 : Error in the application.

  6. 응용 프로그램을 닫습니다.

응용 프로그램의 디버그 출력 창을 보는 방법에 대한 내용은 출력 창을 참조하십시오. 응용 프로그램의 로그 파일 위치에 대한 내용은 연습: My.Application.Log가 정보를 기록하는 위치 확인을 참조하십시오.

참고:

기본적으로 응용 프로그램에서는 응용 프로그램이 닫힐 때 로그 파일 출력을 플러시합니다.

위의 예제에서 WriteEntry 메서드(My.Application.Log 및 My.Log)에 대한 두 번째 호출과 WriteException 메서드(My.Application.Log 및 My.Log)에 대한 호출은 로그 출력을 생성하지만 WriteEntry 메서드에 대한 첫 번째와 마지막 호출은 로그 출력을 생성하지 않습니다. 이것은 WriteEntry 및 WriteException의 심각도 수준이 "정보"와 "오류"여서 모두 My.Application.Log 개체의 기본 로그 필터링을 통과하기 때문입니다. 하지만 심각도 수준이 "시작" 및 "중지"인 이벤트는 로그 출력을 생성하지 않습니다.

모든 My.Application.Log 수신기에 대한 필터링

My.Application.Log 개체에서는 이름이 DefaultSwitch인 SourceSwitch를 사용하여 WriteEntry 및 WriteException 메서드에서 로그 수신기로 전달할 메시지를 제어합니다. 응용 프로그램의 구성 파일에 있는 DefaultSwitch의 값을 SourceLevels 열거형 값 중 하나로 설정하여 이를 구성할 수 있습니다. 이 값의 기본값은 "정보"입니다.

이 표에서는 특정 DefaultSwitch 설정 상태에서 메시지를 수신기에 쓰는 데 필요한 심각도 수준을 보여 줍니다.

DefaultSwitch 값

출력에 필요한 메시지 심각도

Critical

Critical

Error

Critical 또는 Error

Warning

Critical, Error 또는 Warning

Information

Critical, Error, Warning 또는 Information

Verbose

Critical, Error, Warning, Information 또는 Verbose

ActivityTracing

Start, Stop, Suspend, Resume 또는 Transfer

All

모든 메시지가 허용됩니다.

Off

모든 메시지가 차단됩니다.

참고:

WriteEntry 및 WriteException 메서드에는 각각 심각도 수준을 지정하지 않는 오버로드가 있습니다. WriteEntry 오버로드에 대한 암시적 심각도 수준은 "정보"이며 WriteException 오버로드에 대한 암시적 심각도 수준은 "오류"입니다.

이 표에서는 이전 예제에 나와 있는 로그 출력을 설명합니다. 기본 DefaultSwitch 설정인 "정보"의 경우 WriteEntry 메서드에 대한 두 번째 호출과 WriteException 메서드에 대한 호출만이 로그 출력을 생성합니다.

작업 추적 이벤트만 로깅하려면

  1. 솔루션 탐색기에서 app.config를 마우스 오른쪽 단추로 클릭한 다음 열기를 선택합니다.

    - 또는 -

    app.config 파일이 없을 경우

    1. 프로젝트 메뉴에서 새 항목 추가를 선택합니다.

    2. 새 항목 추가 대화 상자에서 응용 프로그램 구성 파일을 선택합니다.

    3. 추가를 클릭합니다.

  2. 최상위 <configuration> 섹션에 있는 <system.diagnostics> 섹션에서 <switches> 섹션을 찾습니다.

  3. DefaultSwitch를 스위치 컬렉션에 추가하는 요소를 찾습니다. 다음 요소와 비슷합니다.

    <add name="DefaultSwitch" value="Information" />

  4. value 특성의 값을 "ActivityTracing"으로 변경합니다.

  5. app.config 파일의 내용은 다음 XML과 비슷합니다.

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.diagnostics>
        <sources>
          <!-- This section configures My.Application.Log -->
          <source name="DefaultSource" switchName="DefaultSwitch">
            <listeners>
              <add name="FileLog"/>
            </listeners>
          </source>
        </sources>
        <switches>
          <add name="DefaultSwitch" value="ActivityTracing" />
        </switches>
        <sharedListeners>
          <add name="FileLog"
               type="Microsoft.VisualBasic.Logging.FileLogTraceListener, 
                     Microsoft.VisualBasic, Version=8.0.0.0, 
                     Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, 
                     processorArchitecture=MSIL" 
               initializeData="FileLogWriter"/>
        </sharedListeners>
      </system.diagnostics>
    </configuration>
    
  6. 디버거에서 응용 프로그램을 실행합니다.

  7. Button1을 누릅니다.

    응용 프로그램에서 다음 정보를 응용 프로그램의 디버그 출력 및 로그 파일에 씁니다.

    DefaultSource Start: 4 : Entering Button1_Click

    DefaultSource Stop: 5 : Leaving Button1_Click

  8. 응용 프로그램을 닫습니다.

  9. value 특성의 값을 다시 "Information"으로 변경합니다.

참고:

DefaultSwitch 스위치 설정은 My.Application.Log만 제어합니다. .NET FrameworkSystem.Diagnostics.TraceSystem.Diagnostics.Debug 클래스의 작동 방식에는 영향을 주지 않습니다.

My.Application.Log 수신기에 대한 개별 필터링

이전 예제에서는 모든 My.Application.Log 출력에 대한 필터링을 변경하는 방법을 보여 줍니다. 이 예제에서는 개별 로그 수신기를 필터링하는 방법을 보여 줍니다. 기본적으로 응용 프로그램에는 응용 프로그램의 디버그 출력과 로그 파일에 쓰는 두 개의 수신기가 있습니다.

구성 파일에서는 My.Application.Log에 대한 스위치와 비슷한 필터를 로그 수신기에서 개별적으로 사용할 수 있도록 허용함으로써 로그 수신기의 동작을 제어합니다. 로그 수신기는 메시지의 심각도가 로그의 DefaultSwitch와 로그 수신기의 필터 모두에서 허용되는 경우에만 메시지를 출력합니다.

이 예제에서는 새 디버그 수신기에 대한 필터링을 구성하고 이를 Log 개체에 추가하는 방법을 보여 줍니다. 기본 메시지가 새 디버그 수신기에서 출력되도록 하려면 기본 디버그 수신기를 Log 개체에서 제거해야 합니다.

작업 추적 이벤트만 로깅하려면

  1. 솔루션 탐색기에서 app.config를 마우스 오른쪽 단추로 클릭한 다음 열기를 선택합니다.

    - 또는 -

    app.config 파일이 없을 경우

    1. 프로젝트 메뉴에서 새 항목 추가를 선택합니다.

    2. 새 항목 추가 대화 상자에서 응용 프로그램 구성 파일을 선택합니다.

    3. 추가를 클릭합니다.

  2. 솔루션 탐색기에서 app.config를 마우스 오른쪽 단추로 클릭합니다. 열기를 선택합니다.

  3. <sources> 섹션 아래에서 name 특성이 "DefaultSource"인 <source> 섹션에 있는 <listeners> 섹션을 찾습니다. <sources> 섹션은 최상위 <configuration> 섹션의 <system.diagnostics> 섹션 아래에 있습니다.

  4. 다음 요소를 <listeners> 섹션에 추가합니다.

    <!-- Remove the default debug listener. -->
    <remove name="Default"/>
    <!-- Add a filterable debug listener. -->
    <add name="NewDefault"/>
    
  5. 최상위 <configuration> 섹션의 <system.diagnostics> 섹션에서 <sharedListeners> 섹션을 찾습니다.

  6. 다음 요소를 <sharedListeners> 섹션에 추가합니다.

    <add name="NewDefault" 
         type="System.Diagnostics.DefaultTraceListener, 
               System, Version=2.0.0.0, Culture=neutral, 
               PublicKeyToken=b77a5c561934e089, 
               processorArchitecture=MSIL">
        <filter type="System.Diagnostics.EventTypeFilter" 
                initializeData="Error" />
    </add>
    

    EventTypeFilter 필터는 SourceLevels 열거형 값 중 하나를 initializeData 특성으로 사용합니다.

  7. app.config 파일의 내용은 다음 XML과 비슷합니다.

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.diagnostics>
        <sources>
          <!-- This section configures My.Application.Log -->
          <source name="DefaultSource" switchName="DefaultSwitch">
            <listeners>
              <add name="FileLog"/>
              <!-- Remove the default debug listener. -->
              <remove name="Default"/>
              <!-- Add a filterable debug listener. -->
              <add name="NewDefault"/>
            </listeners>
          </source>
        </sources>
        <switches>
          <add name="DefaultSwitch" value="Information" />
        </switches>
        <sharedListeners>
          <add name="FileLog"
               type="Microsoft.VisualBasic.Logging.FileLogTraceListener, 
                     Microsoft.VisualBasic, Version=8.0.0.0, 
                     Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, 
                     processorArchitecture=MSIL" 
               initializeData="FileLogWriter"/>
          <add name="NewDefault" 
               type="System.Diagnostics.DefaultTraceListener, 
                     System, Version=2.0.0.0, Culture=neutral, 
                     PublicKeyToken=b77a5c561934e089, 
                     processorArchitecture=MSIL">
            <filter type="System.Diagnostics.EventTypeFilter" 
                    initializeData="Error" />
          </add>
        </sharedListeners>
      </system.diagnostics>
    </configuration>
    
  8. 디버거에서 응용 프로그램을 실행합니다.

  9. Button1을 누릅니다.

    응용 프로그램에서 다음 정보를 응용 프로그램의 로그 파일에 씁니다.

    Default Information: 0 : In Button1_Click

    Default Error: 2 : Error in the application.

    응용 프로그램에서는 필터링이 더 제한적이기 때문에 응용 프로그램의 디버그 출력에 더 적은 정보를 씁니다.

    Default Error 2 Error

  10. 응용 프로그램을 닫습니다.

배포 후 로그 설정을 변경하는 것에 대한 자세한 내용은 Visual Basic에서 응용 프로그램 로그 작업을 참조하십시오.

참고 항목

작업

연습: My.Application.Log가 정보를 기록하는 위치 확인

연습: My.Application.Log가 정보를 기록하는 위치 변경

연습: 사용자 지정 로그 수신기 만들기

방법: 로그 메시지 쓰기

개념

추적 스위치

응용 프로그램의 정보 기록