Я ищу способ добавить и удалить TraceListener для всех существующих источников трассировки.
(Я не уверен, что мой подход здесь правильный, какие еще способы я мог бы использовать? По сути, я хочу регистрировать все выходные данные трассировки в файле, который использует имя текущего проекта в качестве имени файла. Всякий раз, когда пользователь создает или повторно открывает проект, я хочу добавить журналы в правильный файл.Одновременно может быть открыт только один проект.)
Пример кода:
Я создаю несколько 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");
}
Теперь я хочу добавить или удалить traceListener для всех моих traceSource в Среда выполнения, например:
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
}
До сих пор я не нашел способа сделать это, не делая все мои traceSource общедоступными (кажется плохой идеей) и затем перечисляя все мои классы следующим образом:
Class1.Trace.Add( myListener );
Class2.Trace.Add( myListener );
...
что кажется плохим выбором дизайна на несколько уровней.
Или
Добавить все мои источники трассировки в пользовательскую глобальную коллекцию в конструкторе каждого класса (легко забыть/напутать; а глобальные переменные — это плохо)
Есть ли способ получше? В основном я ищу способ установить другого прослушивателя по умолчанию