演练:筛选 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

CriticalErrorWarning

Information

CriticalErrorWarningInformation

Verbose

CriticalErrorWarningInformationVerbose

ActivityTracing

StartStopSuspendResumeTransfer

All

允许所有的消息。

Off

阻止所有的消息。

说明:

WriteEntry 和 WriteException 方法中的每一个都拥有一个不指定严重性级别的重载。WriteEntry 重载的隐式严重性级别为“信息”,而 WriteException 重载的隐式严重性级别为“错误”。

此表解释上例中显示的日志输出:由于默认的 DefaultSwitch 设置为“信息”,因此只有对 WriteEntry 方法的第二次调用和对 WriteException 方法的调用会产生日志输出。

仅记录活动跟踪事件

  1. 在“解决方案资源管理器”中右击 app.config,然后选择“打开”。

    - 或 -

    如果没有 app.config 文件,则:

    1. 在“项目”菜单上选择“添加新项”。

    2. 在“添加新项”对话框中,选择“应用程序配置文件”。

    3. 单击“添加”。

  2. 找到 <switches> 节,该节位于顶级 <configuration> 节中的 <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 开关设置仅控制 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. 在具有 name 属性“DefaultSource”的 <source> 节中找到 <listeners> 节,它位于 <sources> 节下面。<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. 关闭应用程序。

有关在部署之后更改日志设置的更多信息,请参见使用 Application 日志 (Visual Basic)

请参见

任务

演练:确定 My.Application.Log 写入信息的位置

演练:更改 My.Application.Log 写入信息的位置

演练:创建自定义日志侦听器

如何:写入日志消息

概念

跟踪开关

记录来自应用程序的信息