跟踪开关

更新:2007 年 11 月

跟踪开关用于启用、禁用和筛选跟踪输出。它们是存在于代码中的对象,可以通过 .config 文件从外部进行配置。.NET Framework 中提供了三种类型的跟踪开关:BooleanSwitch 类、TraceSwitch 类和 SourceSwitch 类。BooleanSwitch 类用作切换开关,可启用或禁用各种跟踪语句。TraceSwitchSourceSwitch 类用于为特定的跟踪级别启用跟踪开关,以便显示为该级别及其下的所有级别指定的 TraceTraceSource 消息。如果禁用此开关,则不会显示跟踪消息。与用户开发的任何开关一样,所有这些类都从抽象 (MustInherit) 类 Switch 派生。

跟踪开关可用于筛选信息。例如,在数据访问模块中,您可能需要查看所有跟踪消息,但在应用程序的其余部分,则只需查看错误信息。这种情况下,可以将一个跟踪开关用于数据访问模块,而将另一个开关用于应用程序的其余部分。通过使用 .config 文件将开关配置为正确的设置,可以控制所接收的跟踪消息类型。有关更多信息,请参见如何:创建和初始化跟踪开关如何:配置跟踪开关

通常,已部署的应用程序会在已禁用开关的情况下执行,从而使用户无需在应用程序运行时观察大量无关的跟踪消息,这些消息会在屏幕上显示或填满日志文件。如果在执行应用程序的过程中出现问题,则可以停止应用程序,启用开关并重新启动应用程序。然后,将显示跟踪消息。

若要使用开关,必须首先利用 BooleanSwitch 类、TraceSwitch 类或开发人员定义的开关类创建一个开关对象。有关创建开发人员定义的开关的更多信息,请参见 .NET Framework 参考中的 Switch 类。然后,设置一个配置值,指定将在何时使用该开关对象。最后,在各个 Trace(或 Debug)跟踪方法中测试开关对象的设置。

跟踪级别

在使用 TraceSwitch 时,还有一些事项需要考虑。TraceSwitch 对象具有四个返回 Boolean 值的属性,这些值指示是否至少已将开关设置为以下某个特定级别:

级别使您可以将所接收的跟踪信息量限制在解决问题所需的特定信息。通过将跟踪开关设置并配置为适当的跟踪级别,可指定在跟踪输出中所需的详细程度。您可以接收错误信息、警告消息、提示性消息、详细跟踪消息或根本不接收任何消息。

要将哪种消息与每个级别相关联,这完全由您来决定。通常,跟踪消息的内容取决于您将哪些消息与每个级别相关联,但不同级别之间的差异则由您来决定。例如,您可能需要在级别 3 (Info) 提供问题的详细说明,但在级别 1 (Error) 仅提供错误参考号。到底哪种方案最适合您的应用程序,这完全由您来决定。

这些属性对应于从 1 到 4 的 TraceLevel 枚举值。下表列出了 TraceLevel 枚举级别以及它们的值。

枚举值

整数值

显示(或写入指定输出目标)的消息类型

Off

0

Error

1

仅限错误信息。

Warning

2

警告消息和错误信息

Info

3

提示信息、警告消息和错误信息

Verbose

4

详细消息、提示性消息、警告消息和错误信息

TraceSwitch 属性指示开关的最大跟踪级别。也就是说,将写入指定级别及其以下所有级别的跟踪信息。例如,如果 TraceInfotrue,则 TraceErrorTraceWarning 也为 true,但 TraceVerbose 可能为 false

这些属性是只读的。当设置 TraceLevel 属性时,TraceSwitch 对象会自动设置这些属性。例如:

Dim myTraceSwitch As New TraceSwitch("SwitchOne", "The first switch")
myTraceSwitch.Level = TraceLevel.Info
' This message box displays true, becuase setting the level to
' TraceLevel.Info sets all lower levels to true as well.
MessageBox.Show(myTraceSwitch.TraceWarning.ToString())
' This messagebox displays false.
MessageBox.Show(myTraceSwitch.TraceVerbose.ToString())
System.Diagnostics.TraceSwitch myTraceSwitch = 
   new System.Diagnostics.TraceSwitch("SwitchOne", "The first switch");
myTraceSwitch.Level = System.Diagnostics.TraceLevel.Info;
// This message box displays true, becuase setting the level to 
// TraceLevel.Info sets all lower levels to true as well.
MessageBox.Show(myTraceSwitch.TraceWarning.ToString());
// This message box displays false.
MessageBox.Show(myTraceSwitch.TraceVerbose.ToString());
System.Diagnostics.TraceSwitch myTraceSwitch =
   new System.Diagnostics.TraceSwitch("SwitchOne", "The first switch");
myTraceSwitch.set_Level(System.Diagnostics.TraceLevel.Info);
// This message box displays true, becuase setting the level to 
// TraceLevel.Info sets all lower levels to true as well.
MessageBox.Show(Convert.ToString(myTraceSwitch.get_TraceWarning()));
// This message box displays false.
MessageBox.Show(Convert.ToString(myTraceSwitch.get_TraceVerbose()));}

开发人员定义的开关

除了提供 BooleanSwitchTraceSwitch 之外,您还可以通过从 Switch 类继承和用自定义方法重写基类方法来定义您自己的开关。有关创建开发人员定义的开关的更多信息,请参见 .NET Framework 参考中的 Switch 类

请参见

任务

如何:向应用程序代码添加跟踪语句

如何:配置跟踪开关

概念

跟踪侦听器

检测和跟踪的介绍

其他资源

跟踪应用程序和在应用程序中插入检测点