Debug和Trace配置小记

使用配置文件(.config)可以轻松地配置程序,并且不用再次编译程序。

在.Net配置文件(.config)中像Debug/Trace这样的调试/追踪信息在<system.diagnostics>一节(父元素Configuration)中。

在<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。
    • <clear/>, 空元素。
  • <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的成员的字符串名字。

实例:

配置文件为:

 

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
< 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.

这样这个配置文件的目的其实和以下代码相同:

 

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
// <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>

 

 

不过,使用配置文件来对应用程序配置可以省得再次编译了。

转载于:https://www.cnblogs.com/pcy0/archive/2010/05/19/1739392.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值