Как отправлять свои собственные сообщения в файл трассировки WCF? - PullRequest
2 голосов
/ 18 октября 2010

Итак, моя служба 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 голосов
/ 18 октября 2010

Добавьте свой собственный источник в файл конфигурации:

   <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 во время закрытия приложения.

0 голосов
/ 18 октября 2010

Как вы можете видеть здесь , вам нужно вызвать Flush on Trace, чтобы сбросить его для слушателей (или включить AutoFlush).Ты это делаешь?

...