打开和关闭跟踪,并在运行时指定文件路径

时间:2012-09-13 09:32:27

标签: c# .net trace system.diagnostics

我对以下内容感到好奇:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>
    <trace autoflush="false" indentsize="4">
      <listeners>
        <add name="logger" type="System.Diagnostics.TextWriterTraceListener"
             initializeData="LoggingFile.txt" />
        <remove name="Default" />
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

我想在我的解决方案中包含选项,以记录错误消息和堆栈跟踪。但我需要能够打开和关闭它。这可以通过评论System.Diagnostics中的所有内容来实现吗?或者,还有更好的方法?

是否可以指定记录器在运行时写入的文件?

1 个答案:

答案 0 :(得分:4)

您可以使用 SourceSwitch ,它可以跟踪不同级别的消息。首先将一些设置添加到app.config

<system.diagnostics>
  <sources>
    <source name="TraceTest" switchName="SourceSwitch"
            switchType="System.Diagnostics.SourceSwitch">
      <listeners>
            <!-- choose one or use multiple TraceListeners -->
            <add name="console" type="System.Diagnostics.ConsoleTraceListener"
                 initializeData="false"/>
            <add name="file" type="System.Diagnostics.TextWriterTraceListener"
                 initializeData="error.log"/>
            <remove name ="Default"/>
      </listeners>
    </source>
   </sources>
   <switches>
    <!--  MSDN: 4 verbose Information, Information 3, Warning 2, Error 1, -->
    <add name="SourceSwitch" value="Error"/>
  </switches>
  <trace autoflush="true" indentsize="4"/>
</system.diagnostics>

在您的应用程序中,您可以使用引用app.config中定义名称的TraceSource对象来跟踪消息

TraceSource ts = new TraceSource("TraceTest");
ts.TraceEvent(TraceEventType.Information, 123, "event info");
ts.TraceEvent(TraceEventType.Error, 123, "event error");
ts.TraceEvent(TraceEventType.Warning, 123, "event warning");

ts.TraceInformation("any text");
ts.Flush();
ts.Close();

有些常见信息,请查看MSDN上的How to: Use TraceSource ...。使用谷歌博士,我发现了一个相关的question at SO,指的是关于此问题的very good blogpost

有一件事我想指出......

更改侦听器写入跟踪消息的级别

  

配置文件初始化跟踪源的设置   在应用程序初始化时。 要更改这些设置   您必须更改配置文件并重新启动应用程序或   使用TraceRefresh以编程方式刷新应用程序   方法即可。应用程序可以动态更改设置的属性   配置文件覆盖用户指定的任何设置。   例如,您可能希望确保关键消息是   无论当前配置如何,始终发送到文本文件   设置。