• 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的成员的字符串名字。

    实例:

    配置文件为:

    代码
    <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>

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

  • 相关阅读:
    log4j日志基本配置
    MyBatis基本应用
    Java properties配置文件
    Java DAO模式
    Java方式 MySQL数据库连接
    bug 复制代码没有审查,没有完全就该变量名
    cocos3 深入理解tiledmap
    cocos3 深入理解单例模式
    cocos3 CC_BREAK_IF(m_pGameMap==NULL);
    cocos2d3 宏定义屏幕宽高,这样就不用重复获取了
  • 原文地址:https://www.cnblogs.com/pcy0/p/1739392.html
Copyright © 2020-2023  润新知