在我的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方法正确的开关使用?我的应用程序用户如何更改配置文件以允许跟踪或禁用它?
感谢。
答案 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。