将自定义 TextWriterTraceListener 配置为 web.config

本文关键字:web config 配置 自定义 TextWriterTraceListener | 更新日期: 2023-09-27 18:34:40

我看到了关于这个话题的两个答案,但我无法弄清楚。 我有一个自定义的 TextWriterTraceListener,我希望它在我的跟踪源中使用。

 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。

将自定义 TextWriterTraceListener 配置为 web.config

为什么使用配置文件而不是在代码中本地实例化它?通过这种方式,您将避免配置文件在将来的开发和维护中被混淆、移动或错误使用。

创建 MyTextTraceListener 的实例并将其添加到跟踪侦听器:

    MyTextTraceListener myTraceListener = new MyTextTraceListener ("application.log");
    Trace.Listeners.Add(myTraceListener);

也请参阅这篇文章:如何在 app.config 中定义自定义 TraceListener

为什么要把命名空间放两次?我想你只需要:

<add name="Spending" type="MyTraceLogger.MyTextTraceListener,MyTraceLogger" initializeData="Spending.log" />