Question

Supposons que je travaille sur une petite application de console de traitement par lots dans VB.Net. Je veux pouvoir structurer l'application de la manière suivante:

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

Notez que j'utilise Trace plutôt que Console pour ma sortie. En effet, la méthode de travail peut être appelée ailleurs ou même habiter dans un assembly différent et je souhaite pouvoir y attacher différents écouteurs de trace. 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 en ajoutant une instance à la collection d'écouteurs de Trace, mais je me demande s'il existe un moyen plus accepté ou intégré permettant d'accomplir cela:

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
Était-ce utile?

La solution

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.

Autres conseils

Joel,

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

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

ou ceci, 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();

Excellente solution, mais dans certaines situations, différentes dll sont gérées par le même exe appelant. Par conséquent, je ne souhaite 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 de la trace dans le fichier "output.txt". fichier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top