System.Diagnostics.Trace,System.Diagnostics.Debug和System.Console之间的区别是什么?

时间:2014-09-30 17:19:40

标签: c# asp.net .net logging diagnostics

据我了解,System.Console默认会写入STDOUT,但System.Diagnostics.TraceSystem.Diagnostics.Debug呢?什么是默认行为,它们是否可以以任何方式配置?

似乎不同的人使用不同的东西(在互联网上),但我假设我发现的大多数都是错的,因为每个人都应该有特定的语义,对吧?如果是这样,是否有任何框架(如ASP.NET或WPF)特别使用这些?

还有最后一个问题,选择使用其中一个的经验法则是什么?

1 个答案:

答案 0 :(得分:22)

DebugTrace都写到Listeners集合的同一位置。默认情况下,它会路由到Visual Studio的“调试”窗口,但you can put code in your app.config file会在您未调试时将其重定向到其他位置。

DebugTrace之间的区别是Debug中的所有方法仅在设置DEBUG编译符号时写出(默认为debug,off为如果未设置符号,则不会在代码中调用方法。 Trace查找TRACE符号(默认为调试和释放)。除此之外,这两个类是相同的。实际上,如果您修改Debug.Listeners以添加新的侦听器,它也会修改Trace.Listeners,因为它们都指向内部静态属性TraceInternal.Listeners

至于选择使用哪一个,您是否希望在发布和调试模式下显示诊断信息?只使用Trace,Debug?使用Debug。您是否希望在没有附加调试器的情况下最终用户可以看到它?使用Console或添加控制台跟踪侦听器。