Ich suche nach einer Möglichkeit, einen TraceListener für alle vorhandenen TraceSources hinzuzufügen und zu entfernen.TraceListener zu allen TraceSources hinzufügen/entfernen
(Ich bin mir nicht sicher, ob mein Ansatz hier richtig ist, welche anderen Möglichkeiten könnte ich verwenden? Grundsätzlich möchte ich alle Trace-Ausgabe in eine Datei protokollieren, die den aktuellen Projektnamen als Dateiname verwendet. Wann immer ein Benutzer erstellt oder wieder öffnet Projekt möchte ich Protokolle auf die richtige Datei anhängen Es gibt nur zu einem Zeitpunkt ein Projekt geöffnet sein kann)
Code-Beispiel:..
ich mehrere Trace in meiner Anwendung erstellen, eine für jede Klasse
public class Class1
{
private static readonly System.Diagnostics.TraceSource trace =
new System.Diagnostics.TraceSource("Class1");
}
public class Class2
{
private static readonly System.Diagnostics.TraceSource trace =
new System.Diagnostics.TraceSource("Class2");
}
Ich möchte jetzt hinzufügen oder eine Tracelistener, um alle meine Trace zur Laufzeit, wie diese entfernen:
private System.Diagnostics.TextWriterTraceListener myListener;
private onProjectOpen()
{
// user created a new project or opened an existing one
myListener = new System.Diagnostics.TextWriterTraceListener("log-"+projectname+".log");
ALL_TRACESOURCES.Add (myListener) ; // <-- how to do this?
}
private onProjectClose()
{
// user closed a project
ALL_TRACESOURCES.Remove(myListener) ; // <-- how to do this?
myListener.Flush();
myListener.Close();
myListener.Dispose(); // <-- not sure if all this is neccessary
}
Bisher fand ich keine Möglichkeit, dies zu tun, ohne alle öffentlichen meine Trace zu machen (wie eine schlechte Idee scheint) und dann auflisten alle meine Klassen wie folgt:
Class1.Trace.Add(myListener);
Class2.Trace.Add(myListener);
...
die scheint wie eine schlechte Design-Wahl auf mehreren Ebenen.
Oder
hinzufügen alle meine Trace zu einer benutzerdefinierten globalen Sammlung im Konstruktor jeder Klasse (leicht zu vergessen/mess up und globale Variablen sind schlecht)
Gibt es einen besseren Weg? Im Grunde bin ich auf der Suche nach einer Möglichkeit, einen anderen Standard-Listener
Dieses nur Trace bekommt die instanziiert wurden. Wenn es eine Möglichkeit gäbe, dies zu einer beobachtbaren Sammlung zu machen, würden wir mit Gas kochen. – BozoJoe