如何将自己的消息发送到WCF跟踪文件?

时间:2010-10-17 20:08:53

标签: wcf tracing

所以我现在在控制台应用程序上运行自托管我的WCF服务,但我也在IIS上运行它们。 问题是我正在学习理解Service Trace Viewer Tool,当然,现在我想进一步编写自己的消息以包含在跟踪文件中。

我认为应该很容易,但Trace.TraceInformation不会对跟踪文件写任何内容。

我错过了什么?

这就是我的配置:

<configuration>
 <system.diagnostics>
  <sources>
   <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing">
    <listeners>
     <add type="System.Diagnostics.DefaultTraceListener" name="Default">
      <filter type="" />
     </add>
    </listeners>
   </source>
   <source name="System.ServiceModel" switchValue="Verbose,ActivityTracing"
    propagateActivity="true">
    <listeners>
     <add type="System.Diagnostics.DefaultTraceListener" name="Default">
      <filter type="" />
     </add>
     <add name="ServiceModelTraceListener">
      <filter type="" />
     </add>
    </listeners>
   </source>
  </sources>
  <sharedListeners>
   <add initializeData="C:\_sebastian\dev\gomez\WCFTraceTest\Server\App_tracelog.svclog"
    type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
    name="ServiceModelTraceListener" traceOutputOptions="Timestamp">
    <filter type="" />
   </add>
  </sharedListeners>
 </system.diagnostics>
 <system.serviceModel>
  <diagnostics>
   <messageLogging logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true"/>
  </diagnostics>

2 个答案:

答案 0 :(得分:0)

正如您所看到的here,您需要在Trace上调用Flush以将其刷新到侦听器(或打开AutoFlush)。你在做吗?

答案 1 :(得分:0)

将您自己的源添加到配置文件中:

   <source name="MyNameSpace.MySource" switchValue="Verbose,ActivityTracing"
    propagateActivity="true">
    <listeners>
     <add type="System.Diagnostics.DefaultTraceListener" name="Default">
      <filter type="" />
     </add>
     <add name="ServiceModelTraceListener">
      <filter type="" />
     </add>
    </listeners>
   </source>

这不是绝对必要的,但是如果您使用SvcTraceViewer,那么能够将WCF跟踪与您自己的跟踪分开将会很有帮助。 接下来,在您要创建跟踪的任何类中创建TraceSource的实例:

class SomeClass{
  TraceSource _traceSource = new TraceSource("MyNamespace.MySource");

  void SomeMethod(){
    // Anywhere you want to trace you can call the TraceInformation(String) method:
    _traceSource.TraceInformation("My trace message");
  }
}

每次跟踪时都可以调用Flush,但我不推荐它。这些类经过优化,可以尽可能少地破坏代码流,这意味着跟踪可能不会立即显示在文件中,因为实际写入文件发生在另一个线程上。但是,您可以在应用程序关闭期间调用Flush。