Wenn es schnell und unkompliziert sein soll, würde ich Dir den Befehl
System.Diagnostics.Debug.WriteLine()
empfehlen.
Vorteil hierbei ist, dass der Befehl den klassischen "OutputDebugString" ersetzt, das heißt Du kannst mit einem Debugmonitor wie DBMon oder noch besser Debugview eine Ablaufverfolgung implementieren.
Von der Implementierung eines Tracelisteners würde ich Dir auch abraten - hierfür gibt es bereits genügend Lösungen. Wir verwenden für das Logging die Enterprise Library von Microsoft und sind sehr zufrieden damit.
Im Debugmode werden System.Diagnostics.Trace und System.Diagnostics.Debug ausgegeben. Im Tracemode hingegene wird nur System.Diagnostics.Trace ausgegeben. So verwende ich System.Diagnostics.Debug für Funktionaufrufe und Debuginformationen. In System.Diagnostics.Trace schreibe ich Exceptions und andere wichtige Informationen.
Für Log-Ausgaben ist die Trace-Klasse auf jeden Fall schon mal besser geeignet als Console.WriteLine() - zum einen ist klar, dass es sich um Logging handelt und nicht etwa eine Ausgabe, die zur eigentlichen Funktion des Programms gehört. Zum anderen läßt sich die Ausgabe von Trace über die app.config auch noch konfigurieren. Ich würde aber auch Trace nicht verwenden, sondern lieber eine Logging-Bibliothek wie log4net einsetzen. Neben vielen, vielen anderen Vorteilen fällt mir konkret für Dein geschildertes Szenario ein, dass sich mit log4net sehr einfach der Stacktrace der Exception mit ausgeben läßt. Mit TraceError muss man da mehr selbst machen.