如何:配置跟踪开关
在分发应用程序后,仍然可以通过配置应用程序中的跟踪开关来启用或禁用跟踪输出。 配置开关意味着在开关初始化后通过外部源来更改它的值。 您可以使用配置文件来更改开关对象的值。 通过配置跟踪开关,可以将其打开和关闭或设置其级别,以确定它向侦听器传递的消息量及消息类型。
您可以使用 .config 文件来配置开关。 对于 Web 应用程序,该文件是与项目相关联的 Web.config 文件。 在 Windows 应用程序中,此文件被命名为“(应用程序名称).exe.config”。 在已部署的应用程序中,此文件必须驻留在与可执行文件相同的文件夹中。
当应用程序首次执行将创建开关实例的代码时,它将在配置文件中检查有关命名开关的跟踪级别信息。 对于任一特定的开关,跟踪系统只检查一次配置文件,即当应用程序首次创建开关时进行检查。
在已部署的应用程序中,当应用程序未运行时,可以通过重新配置开关对象来启用跟踪代码。 通常,此过程包括打开和关闭开关对象或更改跟踪级别,然后重新启动应用程序。
当创建开关的实例时,也可通过指定以下两个参数将其初始化:displayName 参数和 description 参数。 构造函数的 displayName 参数设置 Switch 类实例的 Switch.DisplayName 属性。 displayName 是一个名称,用于在 .config 文件中配置开关,而 description 参数应返回开关的简要说明以及它所控制的消息。
除了指定要配置的开关的名称之外,还必须指定开关的值。 该值为整数。 对于 BooleanSwitch,值 0 对应于 Off,任何非零值都对应于 On。 对于 TraceSwitch,0、1、2、3 和 4 分别对应于 Off、Error、Warning、Info 和 Verbose。 任何大于 4 的数字都会被当作 Verbose,任何小于零的数字都会被当作 Off。
注意 |
---|
在 .NET Framework 2.0 版中,可以使用文本为开关指定值。例如,true 对应于 BooleanSwitch,表示枚举值的文本(如 Error)对应于 TraceSwitch。<add name="myTraceSwitch" value="Error" /> 行与 <add name="myTraceSwitch" value="1" /> 等效。 |
为了使最终用户能够配置应用程序的跟踪开关,必须提供有关应用程序中开关的详细文档。 您应该详细说明每个开关的用途以及如何打开和关闭每个开关。 您还应该向最终用户提供一个在注释中包含相应帮助的 .config 文件。
创建和配置跟踪开关
在代码中创建开关。 有关更多信息,请参见创建和初始化跟踪开关。
如果项目中没有包含配置文件(app.config 或 Web.config),则从**“项目”菜单中选择“添加新项”**。
Visual Basic:在“添加新项”对话框中选择“应用程序配置文件”。
此时将创建并打开应用程序配置文件。 它是一个根元素为 <configuration>. 的 XML 文档。
Visual C#:在“添加新项”对话框中选择“XML 文件”。 将该文件命名为 app.config。 在 XML 编辑器,在 XML 声明后面添加以下 XML:
<configuration> </configuration>
对项目进行编译以后,app.config 文件被复制到项目输出文件夹中,并且被重命名为 applicationname.exe.config。
在 <configuration> 标记之后,但在 </configuration> 标记之前添加相应的 XML 来配置您的开关。 下面的示例演示了一个 BooleanSwitch,其 DisplayName 属性为 DataMessageSwitch,以及一个 TraceSwitch,其 DisplayName 属性为 TraceLevelSwitch。
<system.diagnostics> <switches> <add name="DataMessagesSwitch" value="0" /> <add name="TraceLevelSwitch" value="0" /> </switches> </system.diagnostics>
在此配置中,两个开关都已关闭。
如果需要打开 BooleanSwitch,如上例所示的 DataMessagesSwitch,请将 Value 更改为 0 以外的任意整数。
如果需要打开 TraceSwitch,如上例所示的 TraceLevelSwitch,请将 Value 更改为适当的级别设置(1 至 4)。
在 .config 文件中添加注释,让最终用户明确正确配置开关所需更改的值。
下面的示例显示最终代码(包含注释)的可能形式:
<system.diagnostics> <switches> <!-- This switch controls data messages. In order to receive data trace messages, change value="0" to value="1" --> <add name="DataMessagesSwitch" value="0" /> <!-- This switch controls general messages. In order to receive general trace messages change the value to the appropriate level. "1" gives error messages, "2" gives errors and warnings, "3" gives more detailed error information, and "4" gives verbose trace information --> <add name="TraceLevelSwitch" value="0" /> </switches> </system.diagnostics>