【发布时间】:2012-05-21 19:49:53
【问题描述】:
我正在寻找一种方法来为所有现有的 TraceSource 添加和删除 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");
}
我现在想在运行时向我的所有 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 添加到每个类的构造函数中的自定义全局集合中(容易忘记/搞砸;全局变量不好)
有没有更好的方法?基本上我正在寻找一种方法来设置另一个默认监听器
【问题讨论】:
-
你能给个答案吗?
标签: c# logging .net-3.5 trace tracelistener