.net - 为什么 ConsoleTraceListener 不写入控制台?

标签 .net

我经常在 .NET Framework 中遇到很少或没有关于如何使用这些功能的代码示例的项目。在其他情况下,有很多示例,但似乎都没有按规定工作。

恰当的例子:System.Diagnostics.ConsoleTraceListener 类。

根据我阅读的所有内容和看到的每个代码示例,当我执行以下操作时:

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

...我应该会看到一个带有“Yo”的控制台窗口弹出。但是,它不是那个预期的输出,而是将“Yo”写入 Visual Studio 输出,在那里人们会看到正常的跟踪/调试消息。

我已经尝试了我在 Google 上搜索过的示例的每一次迭代,包括相应监听器的配置文件设置、将监听器添加到 Trace.Listeners 集合、自定义 ConsoleTraceListener 类型等。我什至刚刚编译为发布版本并运行可执行文件(绝对什么都不做)。

我到底错过了什么?

最佳答案

回答您对 Orion Adrian 的回答的评论...

ConsoleTraceListenterany 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 的情况下编译它,您就可以简单地将日志记录到控制台。就我个人而言,我更喜欢使用更多“魅力”进行日志记录,例如 log4net ,但追踪是一个好的开始。

关于.net - 为什么 ConsoleTraceListener 不写入控制台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/982746/

相关文章:

c# - TreeView 和 Entity Framework 绑定(bind)

.net - 前导 '.' 或 '! ' 只能出现在 'with' 语句内

c# - File.Move 命令的奇怪问题

.net - 如何将多个 .NET Core 程序集合并为一个(.dll/.exe)?

c# - ASP.NET 按钮 options.clientSubmit 设置为 false

.net - 可以防止子 AppDomains 中未处理的异常使主进程崩溃吗?

c# - 在 TFS API 中,如何获取给定测试的完整类名?

c# - Parallel.ForEach finally 子句

c# - 如何将文件路径数组分成几个较小的数组?

c# - 在 MVC Web 应用程序中连接到多个数据库