다음을 통해 공유


안내서: My.Application.Log 출력 필터링(Visual Basic)

이 연습에서는 개체에 대한 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 두 번째 호출과 메서드에 대한 WriteException 호출은 로그 출력을 생성하지만 메서드에 대한 첫 번째 및 마지막 호출 WriteEntry 은 그렇지 않습니다. 이는 WriteEntryWriteException의 심각도 수준이 각각 "정보"와 "오류"이며, 둘 다 My.Application.Log 개체의 기본 로그 필터링에서 허용되기 때문입니다. 그러나 "시작" 및 "중지" 심각도 수준의 이벤트는 로그 출력을 생성할 수 없습니다.

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

My.Application.Log 개체는 SourceSwitch로 명명된 DefaultSwitch를 사용하여 WriteEntryWriteException 메서드로부터 로그 수신기로 전달되는 메시지를 제어합니다. 애플리케이션의 구성 파일에서 DefaultSwitch을(를) 구성하기 위해, 해당 값을 SourceLevels 열거형 값 중 하나로 설정할 수 있습니다. 기본적으로 해당 값은 "정보"입니다.

이 표에서는 특정 DefaultSwitch 설정이 지정된 경우 Log가 수신기에 메시지를 쓰는 데 필요한 심각도 수준을 보여 주었습니다.

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 설정이 "Information"으로 되어 있는 경우, 메서드 WriteEntry에 대한 두 번째 호출과 메서드 WriteException 호출만 로그 출력을 생성합니다.

활동 추적 이벤트만 기록하려면

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

    -또는-

    app.config 파일이 없는 경우:

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

    2. 새 항목 추가 대화 상자에서 애플리케이션 구성 파일을 선택합니다.

    3. 추가를 클릭합니다.

  2. <switches><system.diagnostics> 섹션에 있고, <system.diagnostics>가 최상위 섹션에 있는 것을 찾습니다.

  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 다시 "정보"로 변경합니다.

    비고

    스위치 설정은 DefaultSwitch만 제어합니다. .NET System.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. <listeners> 섹션을 찾습니다. 이는 <source> 섹션 내에 있으며 이 섹션은 name 섹션 아래의 "DefaultSource" 특성을 가진 <sources> 섹션에 포함됩니다. <sources> 섹션은 <system.diagnostics> 섹션 아래에 있으며, 최상위 <configuration> 섹션에 있습니다.

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

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

  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. 애플리케이션을 닫습니다.

배포 후 로그 설정을 변경하는 방법에 대한 자세한 내용은 애플리케이션 로그 작업을 참조하세요.

참고하십시오