指南:更改 Visual Basic 中 My.Application.Log 写入信息的位置

您可以使用My.Application.LogMy.Log对象来记录有关应用程序中发生事件的信息。 本演练演示如何重写默认设置,并导致 Log 对象写入其他日志侦听器。

先决条件

对象 Log 可以将信息写入多个日志侦听器。 在更改配置之前,需要确定日志侦听器的当前配置。 有关详细信息,请参阅 演练:确定 My.Application.Log 写入信息的位置

可能需要查看 作方法:将事件信息写入文本文件如何:写入应用程序事件日志

添加侦听器

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

    - 或 -

    如果其中没有 app.config 文件:

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

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

    3. 单击 添加

  2. 找到 <listeners> 部分,该部分位于 <source> 属性为“DefaultSource”的 name 部分当中,后者又位于 <sources> 部分之下。 <sources> 部分位于 <system.diagnostics> 部分当中,后者又位于顶级 <configuration> 部分之下。

  3. 将这些元素添加到该 <listeners> 节。

    <!-- Uncomment to connect the application file log. -->
    <!-- <add name="FileLog" /> -->
    <!-- Uncomment to connect the event log. -->
    <!-- <add name="EventLog" /> -->
    <!-- Uncomment to connect the event log. -->
    <!-- <add name="Delimited" /> -->
    <!-- Uncomment to connect the XML log. -->
    <!-- <add name="XmlWriter" /> -->
    <!-- Uncomment to connect the console log. -->
    <!-- <add name="Console" /> -->
    
  4. 取消注释希望接收 Log 消息的日志侦听器。

  5. 找到 <sharedListeners> 部分,该部分位于 <system.diagnostics> 部分当中,后者又位于顶级 <configuration> 部分之下。

  6. 将这些元素添加到该 <sharedListeners> 节。

    <add name="FileLog"
         type="Microsoft.VisualBasic.Logging.FileLogTraceListener,
               Microsoft.VisualBasic, Version=8.0.0.0,
               Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
         initializeData="FileLogWriter" />
    <add name="EventLog"
         type="System.Diagnostics.EventLogTraceListener,
               System, Version=2.0.0.0,
               Culture=neutral, PublicKeyToken=b77a5c561934e089"
         initializeData="sample application"/>
    <add name="Delimited"
         type="System.Diagnostics.DelimitedListTraceListener,
               System, Version=2.0.0.0,
               Culture=neutral, PublicKeyToken=b77a5c561934e089"
         initializeData="c:\temp\sampleDelimitedFile.txt"
         traceOutputOptions="DateTime" />
    <add name="XmlWriter"
         type="System.Diagnostics.XmlWriterTraceListener,
               System, Version=2.0.0.0,
               Culture=neutral, PublicKeyToken=b77a5c561934e089"
         initializeData="c:\temp\sampleLogFile.xml" />
    <add name="Console"
         type="System.Diagnostics.ConsoleTraceListener,
               System, Version=2.0.0.0,
               Culture=neutral, PublicKeyToken=b77a5c561934e089"
         initializeData="true" />
    
  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"/>
              <!-- Uncomment to connect the application file log. -->
              <!-- <add name="FileLog" /> -->
              <!-- Uncomment to connect the event log. -->
              <!-- <add name="EventLog" /> -->
              <!-- Uncomment to connect the event log. -->
              <!-- <add name="Delimited" /> -->
              <!-- Uncomment to connect the XML log. -->
              <!-- <add name="XmlWriter" /> -->
              <!-- Uncomment to connect the console log. -->
              <!-- <add name="Console" /> -->
            </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"
               initializeData="FileLogWriter" />
          <add name="EventLog"
               type="System.Diagnostics.EventLogTraceListener,
                     System, Version=2.0.0.0,
                     Culture=neutral, PublicKeyToken=b77a5c561934e089"
               initializeData="sample application"/>
          <add name="Delimited"
               type="System.Diagnostics.DelimitedListTraceListener,
                     System, Version=2.0.0.0,
                     Culture=neutral, PublicKeyToken=b77a5c561934e089"
               initializeData="c:\temp\sampleDelimitedFile.txt"
               traceOutputOptions="DateTime" />
          <add name="XmlWriter"
               type="System.Diagnostics.XmlWriterTraceListener,
                     System, Version=2.0.0.0,
                     Culture=neutral, PublicKeyToken=b77a5c561934e089"
               initializeData="c:\temp\sampleLogFile.xml" />
          <add name="Console"
               type="System.Diagnostics.ConsoleTraceListener,
                     System, Version=2.0.0.0,
                     Culture=neutral, PublicKeyToken=b77a5c561934e089"
               initializeData="true" />
        </sharedListeners>
      </system.diagnostics>
    </configuration>
    

重新配置侦听器

  1. <add> 部分找到侦听器的 <sharedListeners> 元素。

  2. type 属性提供侦听器类型的名称。 此类型必须继承自 TraceListener 类。 请使用强名称类型名称以确保使用正确的类型。 有关详细信息,请参阅下面的“引用强名称类型”部分。

    可以使用的某些类型包括:

    有关其他类型的日志侦听器写入信息的位置的信息,请参阅该类型的文档。

  3. 当应用程序创建日志侦听器对象时,它将属性 initializeData 作为构造函数参数传递。 属性initializeData的含义取决于跟踪侦听器。

  4. 创建日志侦听器后,应用程序将设置侦听器的属性。 这些属性由元素中的其他 <add> 属性定义。 有关特定侦听器的属性的详细信息,请参阅该侦听器类型的文档。

引用强名称类型

  1. 为确保日志侦听器使用正确的类型,请确保使用完全限定的类型名称和强名称程序集名称。 强名称类型的语法如下所示:

    < 类型名称>、<程序集名称>、<版本号>、<区域性>、<强名称>

  2. 此代码示例演示如何确定完全限定类型的强命名类型名称,在本例中为“System.Diagnostics.FileLogTraceListener”。

    Public Sub DisplayStrongName()
        Dim t As Type = GetType(Logging.FileLogTraceListener)
        MsgBox(t.FullName & ", " & t.Assembly.FullName)
    End Sub
    

    它是输出类型,并且可用于唯一引用强名称类型,如上面的“添加侦听器”过程所示。

    Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

另请参阅