无法理解.net 2010跟踪和app.config

时间:2011-01-12 17:55:55

标签: .net visual-studio-2010 logging tracing system.diagnostics

在我的app.config中,我想设置3个跟踪级别(交换机?):详细,警告和无。 在代码的调试版本中,我想要在我想要警告的版本中激活详细开关。在特殊情况下,我的应用程序用户可以修改配置文件以禁用所有跟踪。

我想在控制台上输出调试跟踪,而发布只跟踪日志文件。

我写了以下内容:

[...]
<system.diagnostics>
        <sources>
            <!-- This section defines the logging configuration for My.Application.Log -->
          <source name="debug" switchName="debug">
            <listeners>
              <add name="FileLog"/>
              <add name="console"/>
            </listeners>
          </source>

          <source name="release" switchName="release">
            <listeners>
              <add name="FileLog"/>
            </listeners>
          </source>

          <source name="silent" switchName="none">
            <listeners/>
          </source>
        </sources>


        <switches>
            <add name="debug" value="Verbose"/>
            <add name="release" value="Warning"/>
            <add name="none" value="Off"/>
        </switches>


        <!--<sharedListeners>
            <add name="FileLog" type="System.Diagnostics.TextWriterTraceListener"  traceOutputOptions="DateTime" initializeData="felix.log"/>
            <add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false" />
        </sharedListeners>-->

        <trace autoflush="false" indentsize="4">
          <listeners>
              <add name="FileLog" type="System.Diagnostics.TextWriterTraceListener" traceOutputOptions="DateTime" initializeData="felix.log"/>
              <add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false"/>
              <remove name="Default"/>
          </listeners>
        </trace>

    </system.diagnostics>
[...]

然后在代码中我调用这样的跟踪:

Public Shared Sub HandleException(ByVal ex As Exception)
   Trace.WriteLine(ex.Message, "Error")

[...]

我想,我想念的东西。怎么说Trace方法正确的开关使用?我的应用程序用户如何更改配置文件以允许跟踪或禁用它?

感谢。

1 个答案:

答案 0 :(得分:7)

您似乎将Trace.Write和Trace.WriteLine的日志记录/跟踪概念与使用TraceSource对象的日志记录/跟踪混合在一起。

TraceSource对象允许您单独控制(通过开关)“日志记录对象”,以便您可以为某些代码启用登录,并为代码的其他部分启用。 TraceSource对象的输出可以配置为转到不同的TraceListeners(或同一个TraceListener)。 Trace.WriteLine并不是非常灵活。它只能配置一个级别(即全局可以登录Debug或Info或其他任何级别),而使用TraceSources,一个TraceSource可以在Debug中记录,另一个可以登录Info,而另一个可以完全关闭。 / p>

在这些链接中查看我的答案,了解如何配置TraceSource以及如何在代码中使用它们的一些示例。

How to use TraceSource across classes

Turning tracing off via app.config

What's the best approach to logging?

Add Trace methods to System.Diagnostics.TraceListener

关于您希望跟踪/日志记录在调试与发布中如何工作,您可以拥有两个不同的app.config文件。两者都将定义相同的TraceSource(即同一组“命名的”跟踪/记录对象)。在要与调试版本一起使用的app.config中,您可以将跟踪/日志记录级别设置为一个值Debug / Info / Whatever,您可以将输出定向到控制台和/或文件和/或其他任何内容。在要与调试版本一起使用的app.config中,您可以将跟踪/日志记录级别设置为不同的值(或关闭),并将输出定向到文件。

在上面的两篇文章中,我都包含了一些其他指向System.Diagnostics信息的链接,包括Ukadc.Diagnostics项目。此项目提供了一个非常有趣的格式化功能,可与基于System.Diagnostics的TraceListeners一起使用(前提是监听器来自Ukadc.Diagnostics),实际的跟踪/日志记录语句中没有任何更改。格式化功能类似于log4net和NLog提供的功能。

阅读我上面链接的信息,看看它是否有帮助。尝试使用TraceSources而不仅仅是Trace.WriteLine。如果您对此感到满意,可以查看Ukadc.Diagnostics。