Przekierowanie wyjścia śledzenia do konsoli
Powiedzmy, że pracuję nad małą konsolową aplikacją do przetwarzania wsadowego w VB.Net. chcę być w stanie zorganizować aplikację w ten sposób:
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
Zauważ, że używam Trace
zamiast Console
do mojego wyjścia. Dzieje się tak dlatego, że metoda worker może być wywoływana z innego miejsca, a nawet żyć w innym zespole i chcę być w stanie dołączyć do niej różne słuchacze śledzenia. Jak Mogę podłączyć konsolę do śledzenia?
Mogę już to zrobić definiując prostą klasę (pokazaną poniżej) i dodanie instancji do kolekcji słuchaczy Trace ' a, ale zastanawiam się, czy istnieje bardziej zaakceptowany lub zbudowany sposób, aby to osiągnąć:
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
Możesz dodać następujące do swojego exe .plik konfiguracyjny.
<?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>
Dodałem również tekst, na wypadek gdybyś był zainteresowany zalogowaniem się do pliku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-13 17:21:45
Joel,
Możesz to zrobić zamiast metody konfiguracji aplikacji:
Trace.Listeners.Add(new ConsoleTraceListener());
[2]} lub to, jeśli chcesz zarządzać dodawaniem lub usuwaniem słuchacza podczas życia aplikacji:
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/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-23 15:35:09
Świetne rozwiązanie, ale mam sytuację, w której różne biblioteki dll są uruchamiane przez ten sam wywołujący exe, więc nie chcę modyfikować wywołujących exe .plik konfiguracyjny. Chcę, aby każda dll zajmowała się własną zmianą wyjścia śledzenia.
Easy enough:
Stream outResultsFile = File.Create ("output.txt");
var textListener = new TextWriterTraceListener (outResultsFile);
Trace.Listeners.Add (textListener);
Spowoduje to, oczywiście, wyjście Trace output do " output.txt " plik.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-14 14:59:16