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

更新:2007 年 11 月

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

先决条件

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

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

添加侦听器

  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"
               delimiter=";;;"
               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"
               delimiter=";;;"
               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. 创建日志侦听器之后,应用程序将设置该侦听器的属性。这些属性 (Property) 是由 <add> 元素中的其他属性 (Attribute) 定义的。有关特定侦听器的属性的更多信息,请参见相应侦听器类型的文档。

引用强名称类型

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

    <type name>, <assembly name>, <version number>, <culture>, <strong name>

  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

请参见

任务

如何:将事件信息写入文本文件

如何:写入应用程序事件日志

参考

My.Application.Log 对象

My.Log 对象

TraceListener

Microsoft.VisualBasic.Logging.FileLogTraceListener

System.Diagnostics.EventLogTraceListener