通过app.config更改跟踪开关级别

时间:2013-02-15 08:57:34

标签: c# .net logging app-config

我有app配置其跟踪源,如下所示:

        var traceSource = new TraceSource("MyTraceSource");
        traceSource.Switch = new SourceSwitch("MyTraceSwitch") { **Level = SourceLevels.Information** };

        var traceListener = new TextWriterTraceListener(logFilePath);
        traceListener.TraceOutputOptions = TraceOptions.DateTime;

        traceSource.Listeners.Clear();
        traceSource.Listeners.Add(traceListener);

        Trace.AutoFlush = true;

应用程序始终使用此跟踪源来跟踪事件。 请注意,SourceLevels.Information在跟踪开关中是硬编码的。 现在我需要将跟踪开关级别更改为Verbose。是否可以通过app.config文件完成?我尝试了很多xml-configs但是失败了。注意我无法仅更改源代码app.config。

4 个答案:

答案 0 :(得分:7)

我不确定您是否正在搜索此类内容,但我已将以下xml配置用于:change the trace switch level to Verbose.(App-Config)

  <configuration>
        <system.diagnostics>
            <switches>
            <add name="AppTraceLevel" value="4" /> //4 = Verbose
            </switches>
            // Here would be the Trace Tag with the Listeners (not important for your question)
        </system.diagnostics>
    </configuration>

也许有帮助

答案 1 :(得分:3)

嗯 - Configuring Tracing明确指出:

  <sources>
        <source name="System.ServiceModel" 
                switchValue="Information, ActivityTracing"
                propagateActivity="true">
        </source>
  </sources>

跟踪级别部分介绍了一些细节。

答案 2 :(得分:2)

上述两个答案都有价值。这是完整的回复。将此部分添加到您的配置中:

<system.diagnostics>
<sources>
  <source name="MyTraceSource" switchValue="Information">
    <listeners>
      <add name="file" initializeData="c:\temp\logpath.txt" traceOutputOptions="DateTime" type="System.Diagnostics.TextWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

    </listeners>
  </source>
</sources>
</system.diagnostics>

答案 3 :(得分:0)

在原始问题(vkrzv的帖子)中,听众被删除是一个问题:

traceSource.Listeners.Clear();

导致监听器添加到app.config中的原因(在Glenn Ferries中,这是一个很好的解决方案。我非常喜欢。谢谢。)。

因此,完整的解决方案之一就在这里。您将在c:\ temp文件夹中拥有2个日志文件:logcode.txt和logappconfig.txt

代码:

var traceSource = new TraceSource("MyTraceSource");

var traceListener = new TextWriterTraceListener(@"c:\temp\logcode.txt");
traceListener.TraceOutputOptions = TraceOptions.DateTime;

//traceSource.Listeners.Clear(); //we do not want to delete the listener
traceSource.Listeners.Add(traceListener);

Trace.AutoFlush = true;

App.Config:

<system.diagnostics>
<sources>
  <source name="MyTraceSource" switchValue="Information">
    <listeners>
      <add name="file" initializeData="c:\temp\logappconfig.txt" traceOutputOptions="DateTime" type="System.Diagnostics.TextWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    </listeners>
  </source>
</sources>
</system.diagnostics>