2

我很好奇以下几点:

<?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吗?或者,还有更好的方法?

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

4

1 回答 1

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 ...。使用 Google 博士,我在 SO 上发现了一个相关问题,指的是一篇关于这个问题的非常好的博文。

我想指出一件事...

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

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

于 2012-09-13T18:31:48.253 回答