WCF日志记录:为什么不为TraceListener调用Close?

时间:2011-02-09 08:35:46

标签: .net wcf logging tracelistener

我正在尝试在传输级别将消息记录到我的WCF服务。我已经按照我在网上成功找到的一些说明,但现在我想实现我自己的跟踪监听器,它支持我们的内部日志记录解决方案。

我已经实现了跟踪侦听器,并使用托管WCF服务的Windows服务的app.config进行配置。以下是我用来配置日志记录的XML。

<system.diagnostics>
  <sources>
    <source name="System.ServiceModel.MessageLogging">
      <listeners>
        <add name="messages" type="my.namespace.AdvancedLogTraceListener, Tools.Logging, Version=2.0.3.1, Culture=neutral" initializeData="C:\Logs" />
      </listeners>
    </source>
  </sources>
</system.diagnostics>

...

<diagnostics>
  <messageLogging logEntireMessage="true" logMalformedMessages="false" logMessagesAtServiceLevel="false" logMessagesAtTransportLevel="true">
  </messageLogging>
</diagnostics>

所有这一切都很有效。但是:我们的内部日志记录解决方案就像一个类一样使用。此类启动后台线程以执行日志清理等操作,异步执行实际日志记录等。类要求在关闭应用程序时调用名为Close的方法,该方法停止内部处理并退出线程。

我的TraceListener继承的TraceListener类实现了Close方法。我已经覆盖了这个方法如下:

public override void Close()
{
   base.Close();
   this.logFile.Close();
}

只是它不起作用。似乎没有调用Close的{​​{1}}方法。我应该怎么做才能确保在托管WCF服务的应用程序关闭时我可以调用我的TraceListener方法?

1 个答案:

答案 0 :(得分:0)

讷韦尔认为,我找到了另一种实施消息检查员的解决方案。