73 votes

Rediriger la sortie de trace vers la console

Disons que je suis en train de travailler sur un peu de traitement par lots application console dans VB.Net. Je veux être en mesure de la structure de l'application comme ceci:

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

Note que je suis en utilisant Trace plutôt que d' Console pour ma sortie. C'est parce que le travailleur méthode peut être appelée à partir d'ailleurs, ou même de vivre dans une autre assemblée, et je veux être en mesure de fixer différents trace auditeurs. Alors, comment puis-je connecter la console à la trace?

Je peux déjà le faire en définissant une classe simple (voir ci-dessous) et l'ajout d'une instance à la Trace les auditeurs colelction, mais je me demandais si il y a de plus accepté ou construites en chemin à suivre:

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

151voto

harpo Points 17399

Vous pouvez ajouter ce qui suit au fichier .config de votre 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>
 

J'ai également inclus TextWriter, au cas où vous souhaiteriez vous connecter à un fichier.

52voto

Scott P Points 1976

Joel,

Vous pouvez le faire à la place de la méthode de configuration d'application:

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

ou cela, si vous souhaitez gérer l'ajout ou la suppression de l'écouteur pendant la durée de vie de l'application:

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

Trace.WriteLine("Howdy");

Trace.Listeners.Remove(listener);

Trace.Close();
 

11voto

scottmarlowe Points 2952

Excellente solution, mais j'ai parfois des dll différentes exécutées par le même exe appelant. Je ne souhaite donc pas modifier le fichier .config de l'exe appelant. Je veux que chaque dll gère sa propre modification de la sortie de trace.

Assez facile:

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

Ceci produira, bien sûr, la sortie Trace dans le fichier "output.txt".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: