注释
本文特定于 .NET Framework。 它不适用于 .NET 的较新版本实现,包括 .NET 6 及更高版本。
跟踪开关允许启用、禁用和筛选跟踪输出。 它们是代码中存在的对象,可通过 .config 文件在外部进行配置。 .NET Framework 中提供了三种类型的跟踪开关: BooleanSwitch 类、 TraceSwitch 类和 SourceSwitch 类。 该 BooleanSwitch 类充当切换开关,启用或禁用各种跟踪语句。 使用 TraceSwitch 和 SourceSwitch 类,你可以为特定的跟踪级别启用跟踪开关,使得为该级别及其以下所有级别指定的 Trace 或 TraceSource 消息能够显示。 如果禁用该开关,则不会显示跟踪消息。 所有这些类都派生自抽象 (MustInherit) 类 Switch,与任何用户开发的开关一样。
跟踪开关可用于筛选信息。 例如,你可能希望在数据访问模块中看到每个跟踪消息,但只会在应用程序的其余部分看到错误消息。 在这种情况下,你将对数据访问模块使用一个跟踪开关,对应用程序的其余部分使用一个开关。 通过使用 .config 文件将开关配置为适当的设置,可以控制收到的跟踪消息类型。 有关详细信息,请参阅 如何:创建、初始化和配置跟踪交换机。
通常,部署的应用程序在禁用其开关的情况下执行,以便用户无需观察屏幕上出现的大量不相关的跟踪消息,或者在应用程序运行时填满日志文件。 如果在应用程序执行过程中出现问题,可以停止应用程序、启用开关并重启应用程序。 然后,将显示跟踪消息。
若要使用开关,必须先从 布尔值Switch 类、 TraceSwitch 类或开发人员定义的 switch 类创建 switch 对象。 有关创建开发人员定义开关的详细信息,请参阅 Switch .NET Framework 参考中的类。 然后,设置一个配置值,该值指定何时使用 switch 对象。 然后,在各种 跟踪 (或 调试)跟踪方法中测试 switch 对象的设置。
跟踪级别
使用 TraceSwitch 时,还有其他注意事项。 TraceSwitch 对象有四个属性,这些属性返回布尔值,指示开关是否至少设置为特定级别:
通过级别,可以将收到的跟踪信息量限制为仅解决问题所需的信息量。 可以通过设置和配置跟踪开关来指定跟踪输出中所需的详细信息级别。 可以接收错误消息、警告消息、信息消息、详细跟踪消息或没有任何消息。
这完全取决于你自身确定与每个级别关联的消息类型。 通常,跟踪消息的内容取决于你与每个级别关联的内容,但你可以确定级别之间的差异。 例如,你可能想要提供第 3 级问题的详细描述(信息),但仅提供级别 1(错误)的错误参考号。 完全由你决定哪种方案在应用程序中最有效。
这些属性对应于 TraceLevel 枚举中的值 1 到 4。 下表列出了 TraceLevel 枚举的级别及其值。
枚举值 | 整数值 | 显示的消息类型(或写入指定输出目标) |
---|---|---|
关闭 | 0 | 没有 |
错误 | 1 | 仅错误消息 |
警告 | 2 | 警告消息和错误消息 |
信息 | 3 | 信息性消息、警告消息和错误消息 |
详细 | 4 | 详细消息、信息性消息、警告消息和错误消息 |
TraceSwitch 属性指示交换机的最大跟踪级别。 也就是说,将在指定的级别以及其下的所有级别写入跟踪信息。 例如,如果 TraceInfo 为 true,则 TraceError 和 TraceWarning 也 为 true ,但 TraceVerbose 很可能为 false。
这些属性是只读的。 设置 TraceLevel 属性时,TraceSwitch 对象会自动设置它们。 例如:
Dim myTraceSwitch As New TraceSwitch("SwitchOne", "The first switch")
myTraceSwitch.Level = TraceLevel.Info
' This message box displays true, because 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, because 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());
开发人员定义的开关
除了提供 BooleanSwitch 和 TraceSwitch 之外,还可以从 Switch 类继承并使用自定义方法替代基类方法来定义自己的开关。 有关创建开发人员定义开关的详细信息,请参阅 Switch .NET Framework 参考中的类。