【发布时间】:2015-11-02 20:50:32
【问题描述】:
我正在阅读.NET Framework Development Guide - How to: Use TraceSource and Filters with Trace Listeners,开头有以下建议:
2.0 版的主要区别在于,可以通过TraceSource 类的实例启动跟踪。 TraceSource 旨在用作增强的跟踪系统,可以用来代替旧的Trace 和Debug 跟踪类的静态方法。 熟悉的Trace 和Debug 类仍然存在,但建议的做法是使用TraceSource 类进行跟踪。
我了解如何使用TraceSource 代替Trace 类,但我尚未了解如何使用它来代替Debug。
这里引用一本书C# 5.0 in a Nutshell: The Definitive Reference:
Debug 和 Trace 是提供基本日志记录和 断言能力。
这两个类非常相似; 主要 差异化因素是他们的预期用途。
现在,这里是对差异的更深入描述:
Debug 类的所有方法都用 [Conditional("DEBUG")] 定义。
Trace 类的所有方法都用 [Conditional("TRACE")] 定义。
因此,它会导致在 Realease 构建中消除 Debug 调用:
TraceSource 如何解释这种差异?
【问题讨论】:
-
我不确定问题是什么,
TraceSource不记录Trace.XXX或Debug.XXX通话,只记录TraceSource.XXXX通话。它不必考虑这种差异,因为它无论如何都不会听那些电话......欢迎您查看TraceSource代码:referencesource.microsoft.com/#System/compmod/system/…但TRACE仍然需要定义为记录通话。 -
@Ron: 抱歉我不够清楚 :) 您如何将
Debug.WriteLine()替换为对TraceSource traceSource;的调用,以便它们也将从 DEBUG中删除> 构建? -
@Ron:我查看了源代码
TraceSource.cs并没有找到任何标记为[Conditional("DEBUG")] 的方法。真的有可能我遗漏了什么,请你指出那个方法吗? -
它们被标记为
[Conditional("TRACE")],因此只要定义了TRACE符号,跟踪仍将在发布中起作用。如果您希望将它们从 debug 构建中剥离,请进入构建属性并取消选中调试构建设置的“定义 TRACE 常量”复选框。DEBUG 并不意味着 TRACE。 -
顺便说一句,
TRACE也是默认为发布版本定义的,您可以以相同的方式更改它。您还可以通过在文件顶部包含#undef TRACE来取消对单个代码文件的定义。
标签: c# .net logging conditional-compilation system.diagnostics