演练:筛选 My.Application.Log 输出 (Visual Basic)
本演练演示如何更改对 My.Application.Log
对象的默认日志筛选,以控制哪些信息可从 Log
对象传递到侦听器以及哪些信息可由侦听器编写。 生成应用程序后仍可以更改日志记录行为,因为配置信息存储在应用程序的配置文件中。
入门
My.Application.Log
编写的每条消息均具有相关严重级别,筛选机制使用此级别控制日志输出。 此示例应用程序使用 My.Application.Log
方法编写具有不同严重级别的若干日志消息。
生成示例应用程序
打开一个新的 Visual Basic Windows 应用程序项目。
向 Form1 添加一个名为 Button1 的按钮。
在 Button1 的 Click 事件处理程序中,添加以下代码:
' 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)
在调试器中运行该应用程序。
按“Button1”。
应用程序将向应用程序的调试输出和日志文件中写入以下信息。
DefaultSource Information: 0 : In Button1_Click
DefaultSource Error: 2 : Error in the application.
关闭该应用程序。
有关如何查看应用程序的调试输出窗口的信息,请参阅输出窗口。 有关应用程序日志文件的位置的信息,请参阅演练:确定 My.Application.Log 写入信息的位置。
注意
默认情况下,应用程序关闭时将刷新日志文件输出。
在上面的示例中,对 WriteEntry 方法的第二次调用和对 WriteException 方法的调用会产生日志输出,而对
WriteEntry
方法的第一次和最后一次调用则不会。 这是因为WriteEntry
和WriteException
的严重级别为“信息”和“错误”,而My.Application.Log
对象的默认日志筛选支持这两种级别。 但是,不允许严重级别为“开始”和“停止”的事件生成日志输出。
对所有 My.Application.Log 侦听器的筛选
My.Application.Log
对象使用名为 DefaultSwitch
的 SourceSwitch,以控制将哪些消息从 WriteEntry
和 WriteException
方法传递到日志侦听器。 通过将 DefaultSwitch
的值设置为 SourceLevels 枚举值的其中一个,可在应用程序的配置文件中对其进行配置。 默认情况下,其值为“信息”。
此表显示了在给定的特定 DefaultSwitch
设置下,日志将消息写入侦听器所需的严重级别。
DefaultSwitch 值 | 输出所需的消息严重级别 |
---|---|
Critical |
Critical |
Error |
Critical 或 Error |
Warning |
Critical 、Error 或 Warning |
Information |
Critical 、 Error 、 Warning 或 Information |
Verbose |
Critical 、Error 、Warning 、Information 或 Verbose |
ActivityTracing |
Start 、Stop 、Suspend 、Resume 或 Transfer |
All |
允许所有消息。 |
Off |
阻止所有消息。 |
备注
WriteEntry
和 WriteException
方法分别具有一个未指定严重级别的重载。 WriteEntry
重载的隐式严重级别是“信息”,WriteException
重载的隐式严重级别是“错误”。
此表说明上一示例中显示的日志输出:在 DefaultSwitch
默认设置为“信息”的情况下,只有对 WriteEntry
方法的第二次调用和对 WriteException
方法的调用能生成日志输出。
仅记录活动跟踪事件
在“解决方案资源管理器”中右键单击 app.config,然后选择“打开”。
或
如果其中没有 app.config 文件:
在 “项目” 菜单上选择 “添加新项” 。
在“添加新项” 对话框中,选择“应用程序配置文件” 。
单击 添加。
找到
<switches>
部分,该部分位于<system.diagnostics>
部分中,后者位于顶级<configuration>
部分中。找到将
DefaultSwitch
添加到开关集合的元素。 此元素应与下面的元素类似:<add name="DefaultSwitch" value="Information" />
将
value
属性的值更改为“ActivityTracing”。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>
在调试器中运行该应用程序。
按“Button1”。
应用程序将向应用程序的调试输出和日志文件中写入以下信息:
DefaultSource Start: 4 : Entering Button1_Click
DefaultSource Stop: 5 : Leaving Button1_Click
关闭该应用程序。
将
value
属性的值改回“信息”。注意
DefaultSwitch
开关设置仅控制My.Application.Log
。 它不会更改 .NET System.Diagnostics.Trace 和 System.Diagnostics.Debug 类的行为方式。
对 My.Application.Log 侦听器的单独筛选
上面的示例演示如何更改对所有 My.Application.Log
输出的筛选。 此示例演示如何筛选单个日志侦听器。 默认情况下,应用程序有两个可写入应用程序的调试输出和日志文件的侦听器。
配置文件控制日志侦听器的行为,方法是允许每个侦听器拥有一个筛选器,这类似于 My.Application.Log
的开关。 仅当日志的 DefaultSwitch
和日志侦听器的筛选器均支持消息的严重级别时,日志侦听器才会输出消息。
此示例演示如何为新的调试侦听器配置筛选并将其添加到 Log
对象。 应删除 Log
对象中的默认调试侦听器,以便明确调试消息来自新的调试侦听器。
仅记录活动跟踪事件
在“解决方案资源管理器”中右键单击 app.config,然后选择“打开”。
或
如果其中没有 app.config 文件:
在 “项目” 菜单上选择 “添加新项” 。
在“添加新项” 对话框中,选择“应用程序配置文件” 。
单击 添加。
在“解决方案资源管理器”中右键单击 app.config。 选择“打开”。
找到
<listeners>
部分,该部分位于name
属性为“DefaultSource”的<source>
部分中,后者位于<sources>
部分中。<sources>
部分位于<system.diagnostics>
部分中,后者位于顶级<configuration>
部分中。将此元素添加到
<listeners>
部分:<!-- Remove the default debug listener. --> <remove name="Default"/> <!-- Add a filterable debug listener. --> <add name="NewDefault"/>
找到
<sharedListeners>
部分,该部分位于<system.diagnostics>
部分当中,后者又位于顶级<configuration>
部分之下。将此元素添加到该
<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
属性。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>
在调试器中运行该应用程序。
按“Button1”。
应用程序将以下信息写入应用程序的日志文件:
Default Information: 0 : In Button1_Click
Default Error: 2 : Error in the application.
由于筛选限制性更强,应用程序将较少的信息写入应用程序的调试输出。
Default Error 2 Error
关闭该应用程序。
有关在部署后更改日志设置的详细信息,请参阅使用应用程序日志。