我看到关于这个话题的两个答案,但我无法弄明白。我有一个自定义的TextWriterTraceListener,我希望它在我的traceource中使用。
namespace MyTraceLogger
{
public class MyTextTraceListener : TextWriterTraceListener
{
public override void Write(string message)
{
this.Write(string.Format("{0},{1}",
DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
message));
}
public override void WriteLine(string message)
{
this.WriteLine(string.Format("{0},{1}",
DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
message));
}
}
}
<system.diagnostics>
<sources>
<source name="SpendingTrace" switchName="SpendingSourceSwitch" switchType="System.Diagnostics.SourceSwitch" >
<listeners>
<add name="Spending" type="MyTraceLogger.MyTraceLogger.MyTextTraceListener,MyTraceLogger.MyTraceLogger" initializeData="Spending.log" />
<remove name ="Default" />
</listeners>
</source>
</sources>
<switches>
<!-- You can set the level at which tracing is to occur -->
<add name="SpendingSourceSwitch" value="Warning" />
<!-- You can turn tracing off -->
<!--add name="SourceSwitch" value="Off" -->
</switches>
<trace autoflush="true" indentsize="4"></trace>
这是我得到的错误:无法找到类MyTraceLogger.MyTraceLogger.MyTextTraceListener,MyTraceLogger.MyTraceLogger的类型。
当我右键单击MyTraceLogger的属性项目时,它显示程序集是MyTraceLogger,我的命名空间也是MyTraceLogger。
答案 0 :(得分:4)
为什么要使用配置文件而不在代码中本地实例化它?通过这种方式,您可以避免在将来的开发和维护中错误地混淆,移动或使用配置文件。
创建MyTextTraceListener的实例并将其添加到跟踪侦听器:
MyTextTraceListener myTraceListener = new MyTextTraceListener ("application.log");
Trace.Listeners.Add(myTraceListener);
答案 1 :(得分:0)
为什么要将命名空间放两次?我想你只需要:
<add name="Spending" type="MyTraceLogger.MyTextTraceListener,MyTraceLogger" initializeData="Spending.log" />