cnblogs Post date: 2010-05-19 17:09
使用配置文件(.config)可以轻松地配置程序,并且不用再次编译程序。
在.Net配置文件(.config)中像Debug/Trace这样的调试/追踪信息在
在<system.diagnostics>
可以配置的子项有:
<assert>
元素,控制断言失败后是否显示对话框(assertuienabled属性opt),还可以指定一个日志文件(logfilename属性opt);<performanceCounters>
元素,控制性能计数器共享的全局内存大小(fileMappingSize属性req);<trace>
元素,对应System.Diagnostics.Trace,autoflush对应Trace.AutoFlush, indentsize对应Trace.IndentSize, useGlobalLock对应Trace.UseGlobalLock, 还可以有子元素<listeners>
对应Trace.Listeners.
<listeners>
可以有添加、删除和清空的操作(子元素):
<add type="typeName-required" initializeData="data-optional" name="listenerName-optional" />
, 其中type属性的值必须是完整类型名,或是完全限定了程序集的完全类型名,initializeData是传给type的构造函数的。TraceListener可以有TraceFilter, 这里是为<add>
的子项<filter>
:<filter type="typeName-required" initializeData="data-optional" />
, type和initializeData同上。
<remove name="listenerName-required" />
, 这里name是添加TraceListener时指定的name。, 空元素。 <sources>
元素,用于配置程序中的TraceSource的实例,其子项为<source>
:<source name="sourceName-optional" switchName="switchName-optional" switchType="switchType-optional" extraAttribute="attibutes">
, 值得注意的是,这里switchName可以在<switches>
中定义,如果无定义则取switchName为TraceSource构造函数中的defaultLevel。这里的<source>
也可以像<trace>
一样拥有<listeners>
。
<sharedListeners>
元素,用于在<trace>
和<sources>
等间共享TraceListener。如同<trace>
中的<listeners>
,<sharedListeners>
也可以有<add>
操作,但是没有<remove>
和<clear>
。<switches>
元素,对应System.Diagnostics.Switch的实例集合,可以有添加<add>
操作:<add name="switchName-required" value="switchValue-required">
, 指定相应的Switch的值,name对应Switch构造函数中的displayName。如果是TraceSwitch,value可以指定为SourceLevel的成员的字符串名字。
实例:
配置文件为:
<configuration> <system.diagnostics> <trace autoflush="true" indentsize="4"> <listeners> <add name="consoleTraceListener" type="System.Diagnostics.ConsoleTraceListener" /> <!-- <add name="console"/> --> <remove name="Default"/> </listeners> </trace> <sources> <source name="testTraceSource" switchName="sourceSwitch" switchType="System.Diagnostics.SourceSwitch"> <listeners> <add name="console" /> <remove name="Default" /> </listeners> </source> </sources> <switches> <add name="sourceSwitch" value ="All"/> </switches> <sharedListeners> <add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false" /> </sharedListeners> </system.diagnostics> </configuration>
分析配置文件:
<trace autoflush="true" indentsize="4">
对System.Diagnostics.Trace的AutoFlush和IndentSize分别进行设置。
<add name="consoleTraceListener" type="System.Diagnostics.ConsoleTraceListener" />
添加一个TraceListener, 类型为System.Diagnostics.ConsoleTraceListener(输出到控制台),名为"consoleTraceListener"。
<remove name="Default"/>
移除名为"Default"的TraceListener.
<source name="testTraceSource" switchName="sourceSwitch" switchType="System.Diagnostics.SourceSwitch">
设置名为"testTraceSource"的SourceTrace的Switch 为 名为"sourceSwitch"的,类型为"System.Diagnostics.SourceSwitch"的Switch.
<add name="console" />
向testTraceSource添加名为"console"的TraceListener.
<remove name="Default" />
移除名为"Default"的TraceListener.
<add name="sourceSwitch" value ="All"/>
添加一个名为"sourceSwitch",值(Level)为"All"的Switch.
<add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false" />
添加一个名为"console", 类型为"System.Diagnostics.ConsoleTraceListener"并初始化为false的TraceListener.
这样这个配置文件的目的其实和以下代码相同:
//<configuration>
//<system.diagnostics>
// <trace autoflush="true" indentsize="4">
Trace.AutoFlush = true;
Trace.IndentSize = 4;
// <listeners>
// <add name="consoleTraceListener" type="System.Diagnostics.ConsoleTraceListener" />
Trace.Listeners.Add(new ConsoleTraceListener()
{
Name = "consoleTraceListener"
});
//<!-- <add name="console"/> -->
//<remove name="Default"/>
Trace.Listeners.Remove("Default");
// </listeners>
// </trace>
// <sources>
// <source name="testTraceSource" switchName="sourceSwitch"
// switchType="System.Diagnostics.SourceSwitch">
SourceSwitch sourceSwitch=new SourceSwitch("sourceSwitch");
TraceSource ts = new TraceSource("testTraceSource")
{
Switch = sourceSwitch
};
// <listeners>
// <add name="console" />
TraceListener console = new ConsoleTraceListener(false) { Name = "console" }; // <add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false" />
ts.Listeners.Add(console);
// <remove name="Default" />
ts.Listeners.Remove("Default");
// </listeners>
// </source>
// </sources>
// <switches>
// <add name="sourceSwitch" value ="All"/>
sourceSwitch.Level = SourceLevels.All;
// </switches>
// <sharedListeners>
// <add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false" />
//TraceListener console = new ConsoleTraceListener(false) { Name = "console" }; // 已°?经-提¬¨¢前¡ã执¡ä行D
// </sharedListeners>
// </system.diagnostics>
//</configuration>
不过,使用配置文件来对应用程序配置可以省得再次编译了。