代码之家  ›  专栏  ›  技术社区  ›  TheHolyTerrah

为什么consoleTraceListener不写入控制台?

  •  3
  • TheHolyTerrah  · 技术社区  · 17 年前

    我经常在.NET框架中遇到一些关于如何使用这些功能的代码示例很少或根本没有。在其他场合,有很多例子,但似乎没有一个能按规定发挥作用。

    例如:system.diagnostics.consoleTraceListener类。

    从我读过的每一篇文章和看到的每一个代码示例来看,当我做如下事情时:

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

    …我应该看到一个控制台窗口弹出“哟”。但是,它不是预期的输出,而是将“yo”写入visual studio输出,在那里可以看到正常的跟踪/调试消息。

    我尝试了所有我在谷歌上搜索到的例子,包括适当侦听器的配置文件设置、将侦听器添加到trace.listeners集合、自定义控制台TraceListener类型等。我甚至刚刚编译到发行版并运行了可执行文件(它绝对完全没有)。

    我到底错过了什么?

    2 回复  |  直到 11 年前
        1
  •  6
  •   Jon Skeet    17 年前

    回答你对Orion Adrian的评论…

    一点 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");
        }
    }
    

    在定义了跟踪的情况下编译它,就可以简单地将日志记录到控制台。就我个人而言,我更喜欢更“热情”一点的日志,比如 log4net ,但追踪是一个好的开始。

        2
  •  3
  •   Raimund Steger    11 年前

    即使有 TRACE 如上所述,控制台跟踪信息只有在使用 /target:exe ,即作为控制台可执行文件。如果它是用 /target:winexe ,将没有可用的控制台,因此没有来自 ConsoleTraceListener .

    推荐文章