演练:筛选 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 事件处理程序中,添加以下代码:

  4. 在调试器中运行此应用程序。

  5. “Button1”

    应用程序将下面的信息写入其调试输出和日志文件中。

    DefaultSource Information: 0 : In Button1_Click

    DefaultSource Error: 2 : Error in the application.

  6. 关闭应用程序。

有关如何查看应用程序的调试输出窗口的信息,请参见 “输出”窗口。 有关应用程序日志文件的位置的信息,请参见 演练:确定 My.Application.Log 写入信息的位置 (Visual Basic)

提示

默认情况下,应用程序在关闭时会刷新日志文件的输出。

在上面的示例中,对 WriteEntry 方法的第二次调用和对 WriteException 方法的调用将产生日志输出,然而对 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. 找到 <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 Framework 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. 在具有 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 写入信息的位置 (Visual Basic)

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

演练:创建自定义日志侦听器 (Visual Basic)

如何:编写日志消息 (Visual Basic)

概念

跟踪开关

记录来自应用程序的信息 (Visual Basic)