如何使用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所做的所有调用都将由除非你定义了DEBUGTRACE符号。

TraceSource如何解释这种差异?

如何使用System.Diagnostics.TraceSource类而不是System.Diagnostics.Deb

我想到的最佳解决方案是编写扩展方法。如果有更好的答案,我将把你的答案标记为接受:)。

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);
    }
}

这个解决方案不能满足我,因为,如果有多个程序集需要调试跟踪,我们注定要考虑跨这些程序集的代码复制或创建外部冗余依赖(另一个将包含该类的程序集)。