繁体   English   中英

如何使用System.Diagnostics.TraceSource代替System.Diagnostics.Debug类?

[英]How to use System.Diagnostics.TraceSource instead of System.Diagnostics.Debug class?

我正在阅读.NET Framework开发指南-如何:将TraceSource和筛选器与跟踪侦听器一起使用,并且一开始就有以下建议:

2.0版的主要区别在于,可以通过TraceSource类的实例启动跟踪。 TraceSource旨在用作增强的跟踪系统,并且可以代替较早的TraceDebug跟踪类的静态方法使用。 熟悉的TraceDebug类仍然存在,但是建议的做法是使用TraceSource类进行跟踪。

我了解如何使用TraceSource代替Trace类,但是我还不了解如何使用它代替Debug

这是C#5.0书的一句话:权威参考

DebugTrace是静态类,提供基本的日志记录和断言功能。
这两个类非常相似。 主要 区别在于它们的预期用途

现在,这是对差异的更深入的描述:

Debug类的所有方法都用[Conditional(“ DEBUG”)]定义
Trace类的所有方法都用[Conditional(“ TRACE”)]定义

因此,它消除了Realease构建中的Debug调用:

这意味着除非定义DEBUGTRACE符号,否则编译器将消除您对DebugTrace的所有调用。

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

这个解决方案使我不满意,因为如果有多个需要调试跟踪的程序集,我们注定要考虑在这些程序集之间进行代码重复或创建外部冗余依赖项(另一个将包含此类的程序集)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM