c# - System.Diagnostics.Trace、System.Diagnostics.Debug 和 System.Console 之间有什么区别?

标签 c# asp.net .net logging diagnostics

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

似乎不同的人(在 Internet 上)使用不同的东西,但我假设我发现的大部分内容都是错误的,因为每种东西都应该有特定的语义,对吗?如果是这样,是否有任何框架(如 ASP.NET 或 WPF)专门使用它们?

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

最佳答案

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

DebugTrace的区别在于Debug中的所有方法只有在DEBUG时才写出编译符号已设置(调试时默认打开,发布时默认关闭)未设置符号时,永远不会在代码中调用方法。 Trace 查找 TRACE 符号(调试和发布均默认打开)。除此之外,这两个类是相同的。事实上,如果您修改 Debug.Listeners 以添加新的监听器,它也会修改 Trace.Listeners,因为两者都指向内部静态属性 TraceInternal.Listeners

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

关于c# - System.Diagnostics.Trace、System.Diagnostics.Debug 和 System.Console 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26126526/

相关文章:

c# - 在 DataGridView 中隐藏行,绑定(bind)在我的项目中不起作用

asp.net - 类型 "..."不明确 : it could come from assembly "..." or from assembly "...". 请

c# - .NET Framework 中是否有一些东西可以检查一个值是否适合一个类型?

c# - 没有 "line break"的 FlowLayoutPanel

c# - 可以跳过私有(private)字段并仅使用 C# 中的属性吗?

c# - 如何对包含数据库事务的代码进行单元测试

javascript - ComboBox 抛出错误 :Unable to get property 'createRange' of undefined or null reference

asp.net - 避免 ASP.NET 子应用程序中继承的 ELMAH 错误

.net - 为什么我们需要 SDK 和 .NET Framework?

.net - 将 HashSet<T> 转换为 .NET 中的数组