2009-06-11 140 views
3

很多时候我遇到了.NET框架中的项目,这些项目几乎没有或者没有关于如何使用这些功能的代码示例。在其他场合,有很多例子,但他们似乎没有按照规定工作。ConsoleTraceListener为什么不写入控制台?

案例:System.Diagnostics.ConsoleTraceListener类。

一切从我读过,我见过的每一个代码示例,当我在做类似如下:

ConsoleTraceListner listener = new ConsoleTraceListener(); 
listener.WriteLine("Yo"); 

...我应该可以看到一个控制台窗口弹出与“呦”。但是,不是那个预期的输出,而是在Visual Studio输出中写入“Yo”,其中会看到正常的Trace/Debug消息。

我试着每次迭代我已搜索的例子包括适当的监听器的配置文件设置,将监听器添加到Trace.Listeners集合,自定义ConsoleTraceListener类型等我甚至只是编译为发布版本并运行可执行文件(完全没有任何问题)。

我错过了什么?

回答

6

回答猎户座阿德里安的回答您的评论...

一个ConsoleTraceListenter的点的任何TraceListener不是直接调用它 - 这是将其添加到跟踪侦听集合,使其余的您的代码只是必须调用Trace.Write等。例如:

using System; 
using System.Diagnostics; 

class Test 
{ 
    static void Main() 
    { 
     ConsoleTraceListener listener = new ConsoleTraceListener(); 
     Trace.Listeners.Add(listener); 

     DoSomething(); 

     Trace.Flush(); 
    } 

    static void DoSomething() 
    { 
     DoSomethingElse(); 
    } 

    static void DoSomethingElse() 
    { 
     // We don't want to have to pass all our logging 
     // baggage down this far 
     Trace.WriteLine("In DoSomethingElse"); 
    } 
} 

编译与TRACE定义,并且你已经有了简单的日志记录到控制台。就我个人而言,我更喜欢使用更多的“oomph”,如log4net,但追踪是一个好的开始。

+1

同样在上面的情况下,您可以拥有多个Trace侦听器,一个用于ConsoleTraceListener,另一个用于EventLogTraceListener。 – eschneider 2009-06-11 18:46:55

+0

@Jon,thanx多为您的输入。但是我写了几乎逐字写下的内容。我的评论如上所述:“我尝试了每次迭代我已谷歌搜索的示例,包括......将侦听器添加到Trace.Listeners集合中......”。但它仍然不按我期待的方式工作。我还没有找到合适的组合来实际渲染带有文本的控制台。 – Boydski 2009-06-12 14:16:35

2

即使按照以上建议定义的TRACE,控制台跟踪信息将仅在可执行文件是使用/target:exe(即,即作为控制台执行。如果它是使用/target:winexe创建的,则不会有控制台可用,因此ConsoleTraceListener的跟踪输出不可用。

相关问题