如何使用System.Diagnostics.TraceSource类而不是System.Diagnostics.Deb
本文关键字:Diagnostics System Deb TraceSource 何使用 | 更新日期: 2023-09-27 18:07:09
我正在阅读。net框架开发指南-如何:使用TraceSource和过滤器与跟踪侦听器,并在开始有以下建议:
2.0版本的主要区别是可以通过TraceSource类的实例启动跟踪。TraceSource的目的是作为一个增强的跟踪系统,可以用来代替旧的Trace和Debug跟踪类的静态方法。熟悉的Trace和Debug类仍然存在,但是推荐的做法是使用TraceSource类进行跟踪。
我知道TraceSource是如何代替Trace类的,但是我还不知道它是如何代替Debug的。
这是一段引自《c# 5.0概览》一书的引言:权威参考:
Debug 和Trace是静态类,提供基本的日志记录和断言功能。
这两个类别非常相似;主要微分器是它们的预期用途
现在,这里是对差异的更深入的描述:
Debug类的所有方法都是用[Conditional(" Debug ")]定义的。
Trace类的所有方法都是用[Conditional(" Trace ")]定义的。
因此,它导致在发布版本中消除调试调用:
这意味着您对Debug或Trace所做的所有调用都将由除非你定义了DEBUG或TRACE符号。
TraceSource如何解释这种差异?
我想到的最佳解决方案是编写扩展方法。如果有更好的答案,我将把你的答案标记为接受:)。
public static class TraceSourceExtentions
{
[Conditional("DEBUG")]
public static void TraceDebug(this TraceSource traceSource, string message)
{
traceSource.TraceEvent(
eventType: TraceEventType.Verbose,
id: 0,
format: message);
}
[Conditional("DEBUG")]
public static void TraceDebug(this TraceSource traceSource, string format, params object[] args)
{
traceSource.TraceEvent(
eventType: TraceEventType.Verbose,
id: 0,
format: format,
args: args);
}
}
这个解决方案不能满足我,因为,如果有多个程序集需要调试跟踪,我们注定要考虑跨这些程序集的代码复制或创建外部冗余依赖(另一个将包含该类的程序集)。