Redirigir la salida de seguimiento a la consola
Digamos que estoy trabajando en una pequeña aplicación de consola de procesamiento por lotes en VB.Net. Quiero ser capaz de estructurar la aplicación de esta manera:
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
Tenga en cuenta que estoy usando Trace
en lugar de Console
para mi salida. Esto se debe a que el método worker puede ser llamado desde otro lugar, o incluso vivir en un ensamblaje diferente, y quiero ser capaz de adjuntar diferentes oyentes de seguimiento a él. Entonces, ¿cómo puedo conectar la consola al trace?
Ya puedo hacerlo definiendo una clase simple (mostrada a continuación) y añadiendo una instancia a la colección de oyentes de Trace, pero me pregunto si hay una forma más aceptada o construida para lograr esto:
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
3 answers
Puede agregar lo siguiente a su exe .archivo de configuración.
<?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>
También incluí al redactor de textos, en caso de que esté interesado en iniciar sesión en un archivo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-13 17:21:45
Joel,
Puedes hacer esto en lugar del método de configuración de la aplicación:
Trace.Listeners.Add(new ConsoleTraceListener());
O esto, si desea administrar la adición o eliminación del oyente durante la vida útil de la aplicación:
ConsoleTraceListener listener = new ConsoleTraceListener();
Trace.Listeners.Add(listener);
Trace.WriteLine("Howdy");
Trace.Listeners.Remove(listener);
Trace.Close();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-23 15:35:09
Gran solución, pero tengo una situación en la que tengo diferentes dll que se ejecutan por el mismo exe de llamada, por lo que no quiero modificar los exe de llamada .archivo de configuración. Quiero que cada dll maneje su propia alteración de la salida de rastreo.
Bastante fácil:
Stream outResultsFile = File.Create ("output.txt");
var textListener = new TextWriterTraceListener (outResultsFile);
Trace.Listeners.Add (textListener);
Esto, por supuesto, la salida de Trace de salida a la " salida.txt archivo".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-14 14:59:16