Перенаправление вывода трассировки на консоль



допустим, я работаю над небольшим консольным приложением для пакетной обработки 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 может быть вызван из другого места или даже жить в другой сборке, и я хочу иметь возможность присоединять к нему разные прослушиватели трассировки. Так как я могу подключить консоль к трассировке?



Я уже могу это сделать, определив a простой класс( показано ниже) и добавление экземпляра в коллекцию слушателей трассировки, но мне интересно, есть ли более приемлемый или встроенный способ выполнить это:



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
664   3  

3 ответов:

вы можете добавить следующее в свой exe-файл .конфигурационный файл.

<?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, если вам интересно войти в файл.

Джоэл,

Вы можете сделать это вместо метода конфигурации приложения:

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

или это, если вы хотите управлять добавлением или удалением слушателя в течение жизни приложения:

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

Trace.WriteLine("Howdy");

Trace.Listeners.Remove(listener);

Trace.Close();

отличное решение, но у меня есть ситуация, когда у меня есть разные dll, которые запускаются одним и тем же вызывающим exe, поэтому я не хочу изменять вызывающий exe .конфигурационный файл. Я хочу, чтобы каждая dll обрабатывала собственное изменение вывода трассировки.

достаточно просто:

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

Это, конечно же, выведет вывод трассировки на "выход.txt-файл.

Comments

    Ничего не найдено.