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

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

系统必备

Log 对象可将信息写入到几个日志侦听器。 在更改配置之前,需要确定日志侦听器的当前配置。 有关更多信息,请参见 演练:确定 My.Application.Log 写入信息的位置 (Visual Basic)

您可能希望检查 如何:将事件信息写入文本文件 (Visual Basic)如何:写入应用程序事件日志 (Visual Basic)

添加侦听器

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

    - 或 -

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

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

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

    3. 单击**“添加”**。

  2. 在 <sources> 节中找到 <listeners> 节,它位于 name 特性为“DefaultSource”的 <source> 节下面。 <sources> 节位于顶级 <configuration> 节的 <system.diagnostics> 节中。

  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. 在顶级 <configuration> 节的 <system.diagnostics> 节中找到 <sharedListeners> 节。

  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. 在 <sharedListeners> 节中找到侦听器的 <add> 元素。

  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

请参见

任务

如何:将事件信息写入文本文件 (Visual Basic)

如何:写入应用程序事件日志 (Visual Basic)

参考

Microsoft.VisualBasic.Logging.Log

TraceListener

Microsoft.VisualBasic.Logging.FileLogTraceListener

System.Diagnostics.EventLogTraceListener