演练:更改 My.Application.Log 写入信息的位置
更新:2007 年 11 月
可以使用 My.Application.Log 和 My.Log 对象记录有关应用程序中发生的事件的信息。本演练演示如何重写默认设置以使 Log 对象写入其他日志侦听器。
先决条件
Log 对象可将信息写入到几个日志侦听器。在更改配置之前,需要确定日志侦听器的当前配置。有关更多信息,请参见演练:确定 My.Application.Log 写入信息的位置。
您可能希望检查如何:将事件信息写入文本文件或如何:写入应用程序事件日志。
添加侦听器
在“解决方案资源管理器”中右击“app.config”,然后选择“打开”。
或者
如果没有 app.config 文件,则:
在“项目”菜单上选择“添加新项”。
在“添加新项”对话框中,选择“应用程序配置文件”。
单击“添加”。
在 <sources> 节中找到 <listeners> 节,它位于 name 属性为“DefaultSource”的 <source> 节下面。<sources> 节位于顶级 <configuration> 节的 <system.diagnostics> 节中。
将这些元素添加到该 <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" /> -->
取消注释要接收 Log 消息的日志侦听器。
在顶级 <configuration> 节的 <system.diagnostics> 节中找到 <sharedListeners> 节。
将这些元素添加到该 <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" />
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>
重新配置侦听器
在 <sharedListeners> 节中找到侦听器的 <add> 元素。
type 属性指定侦听器类型的名称。此类型必须从 TraceListener 类继承。使用强名称类型的名称以确保使用正确的类型。有关更多信息,请参见下面的“引用强名称类型”部分。
您可以使用的一些类型包括:
一个 Microsoft.VisualBasic.Logging.FileLogTraceListener 侦听器,用于写入文件日志。
一个 System.Diagnostics.EventLogTraceListener 侦听器,用于将信息写入由 initializeData 参数指定的计算机事件日志。
System.Diagnostics.DelimitedListTraceListener 和 System.Diagnostics.XmlWriterTraceListener 侦听器,用于写入在 initializeData 参数中指定的文件。
一个 System.Diagnostics.ConsoleTraceListener 侦听器,用于写入命令行控制台。
有关其他类型的日志侦听器将信息写入何处的内容,请参考相应类型的文档。
应用程序创建日志侦听器对象时,将 initializeData 属性作为构造函数参数传递。initializeData 属性的含义取决于跟踪侦听器。
创建日志侦听器之后,应用程序将设置该侦听器的属性。这些属性 (Property) 是由 <add> 元素中的其他属性 (Attribute) 定义的。有关特定侦听器的属性的更多信息,请参见相应侦听器类型的文档。
引用强名称类型
要确保日志侦听器使用正确的类型,就要确保使用完全限定类型名称和强名称程序集名称。强名称类型的语法如下:
<type name>, <assembly name>, <version number>, <culture>, <strong name>
此代码示例演示如何确定完全限定类型(在本例中为“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