Angenommen, ich arbeite an einer kleinen Konsolen-App für die Stapelverarbeitung in VB.Net. Ich möchte die App folgendermaßen strukturieren können:
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
Beachten Sie, dass ich Trace
nicht Console
für meine Ausgabe verwende. Dies liegt daran, dass die Worker-Methode möglicherweise von einer anderen Stelle aufgerufen wird oder sogar in einer anderen Assembly lebt, und ich möchte in der Lage sein, verschiedene Trace-Listener daran anzuhängen. Wie kann ich die Konsole mit dem Trace verbinden?
Ich kann dies bereits tun, indem ich eine einfache Klasse definiere (siehe unten) und der Listener-Sammlung des Trace eine Instanz hinzufüge, aber ich frage mich, ob es eine akzeptierte oder eingebaute Methode gibt, um dies zu erreichen:
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
Joel,
Sie können dies anstelle der App-Konfigurationsmethode tun:
Trace.Listeners.Add(new ConsoleTraceListener());
oder dies, wenn Sie das Hinzufügen oder Entfernen des Listeners während der Lebensdauer der App verwalten möchten:
ConsoleTraceListener listener = new ConsoleTraceListener(); Trace.Listeners.Add(listener); Trace.WriteLine("Howdy"); Trace.Listeners.Remove(listener); Trace.Close();
quelle
Tolle Lösung, aber ich habe eine Situation, in der verschiedene DLLs von derselben aufrufenden Exe ausgeführt werden, sodass ich die .config-Datei der aufrufenden Exe nicht ändern möchte. Ich möchte, dass jede DLL ihre eigene Änderung der Trace-Ausgabe übernimmt.
Leicht genug:
Stream outResultsFile = File.Create ("output.txt"); var textListener = new TextWriterTraceListener (outResultsFile); Trace.Listeners.Add (textListener);
Dadurch wird natürlich die Trace-Ausgabe in die Datei "output.txt" ausgegeben.
quelle