假设我正在用VB.Net开发一个小型批处理控制台应用程序.我希望能够这样构建应用程序:

Sub WorkerMethod()
   'Do some work
   Trace.WriteLine("Work progress")

   'Do more work
   Trace.WriteLine("Another progress update")

   '...
End Sub


Sub Main()

   'Do any setup, like confirm the user wants to continue or whatever

   WorkerMethod()     

End Sub

请注意,我的输出使用的是Trace,而不是Console.这是因为Worker方法可能会从其他地方调用,甚至可能位于不同的程序集中,而我希望能够将不同的跟踪侦听器附加到它.那么我如何将控制台连接到跟踪呢?

我已经可以通过定义一个简单的类(如下所示)并向Trace的listeners集合添加一个实例来实现这一点,但我想知道是否有一种更被接受或内置的方式来实现这一点:

Public Class ConsoleTrace
    Inherits Diagnostics.TraceListener

    Public Overloads Overrides Sub Write(ByVal message As String)
        Console.Write(message)
    End Sub

    Public Overloads Overrides Sub WriteLine(ByVal message As String)
        Console.WriteLine(message)
    End Sub
End Class

推荐答案

您可以将以下内容添加到exe的.config文件中.

<?xml version="1.0"?>
<configuration>
    <system.diagnostics>
        <trace autoflush="true">
            <listeners>
                <add name="logListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="cat.log" />
                <add name="consoleListener" type="System.Diagnostics.ConsoleTraceListener"/>
            </listeners>
        </trace>
    </system.diagnostics>
</configuration>

我还包括了TextWriter,以防您对登录文件感兴趣.

.net相关问答推荐

什么是提升运算符?

如何判断 IOException 是否为 Not-Enough-Disk-Space-Exception 类型?

在一个 LINQ 查询中获取两列的总和

.NET 的 `Array.Sort()` 方法使用的排序算法是稳定的算法吗?

返回 IQueryable 或不返回 IQueryable

为什么要判断这个!= null?

(C# 7.2)私有保护修饰符的用例是什么?

Linq查询分组并 Select 第一个项目

如何正确停止BackgroundWorker

C# 方法可以定义为采用的最大参数数是多少?

无法将文件 *.mdf 作为数据库附加

在 C# 中使用委托

向 .NET 应用程序添加脚本功能

单元测试 C# 保护方法

有没有像样的 C# 分析器?

如何知道 DateTime 是否在 C# 中的 DateRange 之间

String.Join 与 StringBuilder:哪个更快?

在 Windows 窗体 C# 应用程序中拥有配置文件的最简单方法

将控制台输出镜像到文件

序列化和反序列化 .NET 对象的最快方法