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

vul*_*ino 5 .net logging trace system.diagnostics visual-studio-2010

在我的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>
[...]
Run Code Online (Sandbox Code Playgroud)

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

Public Shared Sub HandleException(ByVal ex As Exception)
   Trace.WriteLine(ex.Message, "Error")
Run Code Online (Sandbox Code Playgroud)

[...]

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

谢谢.

wag*_*ghe 7

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

TraceSource对象允许您单独控制(通过开关)"日志记录对象",以便您可以为某些代码打开日志,并为代码的其他部分关闭.TraceSource对象的输出可以配置为转到不同的TraceListeners(或同一个TraceListener).Trace.WriteLine并不是非常灵活.它只能与一个级别上进行配置(即全球范围内,你可以登录在调试或信息或其他),而与TraceSources,一个TraceSource可以在调试日志记录,另一个可以在信息被记录,而另外一个可能是完全关闭.

有关如何配置TraceSource以及如何在代码中使用它们的一些示例,请参阅这些链接中的答案.

如何跨类使用TraceSource

通过app.config关闭跟踪

记录的最佳方法是什么?

将Trace方法添加到System.Diagnostics.TraceListener

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

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

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