演练:筛选 My.Application.Log 输出 (Visual Basic)

本演练演示如何更改对象的默认日志筛选 My.Application.Log ,以控制从 Log 对象传递到侦听器的信息以及侦听器写入的信息。 即使在生成应用程序后,也可以更改日志记录行为,因为配置信息存储在应用程序的配置文件中。

入门指南

写入的每个消息 My.Application.Log 都有关联的严重性级别,筛选机制用于控制日志输出。 此示例应用程序使用 My.Application.Log 方法编写具有不同严重性级别的多个日志消息。

构建一个示例应用程序

  1. 打开新的 Visual Basic Windows 应用程序项目。

  2. 将名为 Button1 的按钮添加到 Form1。

  3. Click Button1 的事件处理程序中,添加以下代码:

    ' 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对象的默认日志筛选所允许。 但是,具有“Start”和“Stop”严重性级别的事件不会生成日志输出。

对所有 My.Application.Log 侦听器的筛选

My.Application.Log 对象使用名为 SourceSwitchDefaultSwitch 控制器来管理它将从 WriteEntryWriteException 方法传递给日志侦听器的消息。 你可以在应用程序的配置文件中配置DefaultSwitch,方法是将其值设置为SourceLevels枚举值之一。 默认情况下,其值为“Information”。

下表显示了在给定特定 DefaultSwitch 设置的情况下,Log 向侦听器写入消息所需的严重性级别。

DefaultSwitch 值 输出所需的消息严重级别
Critical Critical
Error CriticalError
Warning CriticalErrorWarning
Information CriticalErrorWarningInformation
Verbose CriticalErrorWarningInformationVerbose
ActivityTracing StartStopSuspendResumeTransfer
All 允许所有消息。
Off 所有消息都被阻止。

注释

每个 WriteEntryWriteException 方法都有一个不指定严重性级别的重载。 重载的 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 开关设置仅控制 My.Application.Log。 它不会更改 .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> 属性为“DefaultSource”的 name 部分中,后者位于 <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. 关闭应用程序。

有关部署后更改日志设置的详细信息,请参阅 使用应用程序日志

另请参阅