既存のすべての TraceSource の TraceListener を追加および削除する方法を探しています。
(ここでの私のアプローチが正しいかどうかはわかりません。他にどのような方法を使用できますか?基本的に、現在のプロジェクト名をファイル名として使用するファイルにすべてのトレース出力を記録したいと考えています。ユーザーがプロジェクトを作成または再度開くときはいつでも、ログを正しいファイルに追加します。一度に開くことができるプロジェクトは 1 つだけです。)
コード例:
クラスごとに 1 つずつ、アプリケーションに複数の TraceSource を作成します。
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");
}
次のように、実行時にすべての traceSources に traceListener を追加または削除したいと考えています。
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
}
これまでのところ、すべての traceSources を公開し (悪い考えのように思えます)、すべてのクラスを次のようにリストしない限り、これを行う方法が見つかりませんでした。
Class1.Trace.Add( myListener );
Class2.Trace.Add( myListener );
...
これは、いくつかのレベルで悪い設計の選択のようです。
または
すべての TraceSources を各クラスのコンストラクターのカスタム グローバル コレクションに追加します (簡単に忘れたり混乱させたりします。グローバル変数は良くありません)。
より良い方法はありますか?基本的に、別のデフォルトリスナーを設定する方法を探しています