can';我不理解.net 2010跟踪和app.config

can';我不理解.net 2010跟踪和app.config,.net,visual-studio-2010,logging,trace,system.diagnostics,.net,Visual Studio 2010,Logging,Trace,System.diagnostics,在我的app.config中,我想设置3个跟踪级别(开关?):详细、警告和无。 在代码的调试版本中,我希望verbose开关处于活动状态,在发布版本中,我希望发出警告。在特殊情况下,我的应用程序用户可以修改配置文件以禁用所有跟踪 我希望在控制台上输出调试跟踪,而只将跟踪释放到日志文件 我写了以下内容: [...] <system.diagnostics> <sources> <!-- This section defines

在我的app.config中,我想设置3个跟踪级别(开关?):详细、警告和无。 在代码的调试版本中,我希望verbose开关处于活动状态,在发布版本中,我希望发出警告。在特殊情况下,我的应用程序用户可以修改配置文件以禁用所有跟踪

我希望在控制台上输出调试跟踪,而只将跟踪释放到日志文件

我写了以下内容:

[...]
<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>
[...]
[……]

我想我遗漏了一些东西。我怎么说对跟踪方法的正确切换使用??我的应用程序用户如何更改配置文件以允许跟踪或禁用它


谢谢。

您似乎将通过Trace.Write和Trace.WriteLine记录/跟踪的概念与使用TraceSource对象记录/跟踪混为一谈

TraceSource对象允许您拥有可单独控制的(通过开关)“日志对象”,这样您就可以打开部分代码的日志记录,关闭部分代码的日志记录。TraceSource对象的输出可以配置为转到不同的TraceListener(或同一TraceListener)。Trace.WriteLine实际上不是很灵活。它只能配置为一个级别(即全局上您可以在Debug或Info或其他任何级别登录),而使用TraceSources,一个TraceSources可以在Debug时登录,另一个可以在Info时登录,而另一个可以完全关闭

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

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

在上面的两篇文章中,我还提供了几个指向System.Diagnostics信息的链接,包括该项目。此项目提供了一个非常有趣的格式化功能,可用于基于System.Diagnostics的TraceListener(前提是侦听器来自Ukadc.Diagnostics),而不会更改实际的跟踪/记录语句。格式化功能类似于log4net和NLog提供的功能


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

非常感谢,我已经阅读了所有内容,你在我的日志黑暗中照亮了我:)我建议你写一篇文章/博客文章/网页,无论什么都可以集中这些信息,否则这些信息将被传播。如果你这样做,那么给我发送链接!再次感谢。我终于找到了答案,但仍然无法使用id传递给TraceeEvent方法。如果跟踪源允许我配置要记录的位置(侦听器)和数量(开关),然后我以编程方式指定事件类型(TraceEventType),那么还必须指定Id有什么用呢?有关事件Id的一个想法,请参阅此问题的第一个答案:查看“其他建议”下的内容。根据该建议,您可以对每个日志消息进行分类(不管TraceSource、TraceEventType或消息)。这样就比较容易查询/搜索输出中的特定类型的消息。例如,如果事件id 1001表示“从文件读取”,1002表示“向文件写入”,则可以在输出中找到与从文件读取或向文件写入相对应的所有日志消息。您可能在代码中的许多位置具有文件访问权限,并且如果您没有使用事件id标记消息,从跟踪/日志输出中可能很难确定您在哪里有文件访问权限。在分析跟踪/日志输出时,将事件id作为列(如果您正在跟踪/记录数据库)还将为您提供一个可查询的列。如果您的事件ID有文档记录,那么有问题的用户可能会打开跟踪/日志记录,并且可能会看到有很多5001和5002事件ID。这对你来说可能意味着什么,甚至不必…更详细地查看日志文件。如何(或是否)使用事件id取决于您。如果使用得当,它可能对分析注销和故障排除有很大帮助。希望这有帮助。
Public Shared Sub HandleException(ByVal ex As Exception)
   Trace.WriteLine(ex.Message, "Error")