将跟踪输出redirect到控制台

比方说,我正在VB.Net中的一个小批处理控制台应用程序。 我想能够像这样构build应用程序:

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的侦听器集合中,但我想知道是否有一个更接受或内置的方式来实现这一点:

 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,以防万一你有兴趣login到文件。

乔尔,

你可以这样做,而不是应用程序的configuration方法:

 Trace.Listeners.Add(new ConsoleTraceListener()); 

或者这个,如果你想在应用程序的生命周期中pipe理添加或删除监听器:

 ConsoleTraceListener listener = new ConsoleTraceListener(); Trace.Listeners.Add(listener); Trace.WriteLine("Howdy"); Trace.Listeners.Remove(listener); Trace.Close(); 

伟大的解决scheme,但我有一个情况,我有不同的DLL正在运行相同的调用EXE,所以我不想修改调用EXE的.config文件。 我想要每个DLL来处理它自己的跟踪输出的改变。

足够简单:

 Stream outResultsFile = File.Create ("output.txt"); var textListener = new TextWriterTraceListener (outResultsFile); Trace.Listeners.Add (textListener); 

这当然会将Trace输出输出到“output.txt”文件。