如何将 WCF 跟踪设置为仅记录警告、错误和致命错误?

How to set WCF Tracing to long only Warnings, Erros and Fatals?

我正在尝试在生产环境中的 WCF 服务器中设置跟踪,因此它只记录 "issues"。不是信息。我查看了 Microsoft 文档,here,但它对我不起作用。

部署或调试的推荐设置

我试过了,看起来很管用。我正在记录每条消息(我认为)。

还有生产环境的推荐设置,此处:

<configuration>  
 <system.diagnostics>  
  <sources>  
    <source name="System.ServiceModel"  
            switchValue="Warning"  
            propagateActivity="true" >  
      <listeners>  
        <add name="xml"/>  
      </listeners>  
    </source>  
    <source name="myUserTraceSource"  
            switchValue="Warning, ActivityTracing">  
      <listeners>  
        <add name="xml"/>  
      </listeners>  
    </source>  
  </sources>  
  <sharedListeners>  
    <add name="xml"  
         type="System.Diagnostics.XmlWriterTraceListener"  
               initializeData="C:\logs\Traces.svclog" />  
  </sharedListeners>  
 </system.diagnostics>  

<system.serviceModel>  
  <diagnostics wmiProviderEnabled="true">  
  </diagnostics>  
 </system.serviceModel>  
</configuration>  

我将它粘贴到我的配置文件中,然后..我认为有错字。他们写道:

switchValue="Warning"(不创建日志)

所以我改成了:switchValue="Warning, ActivityTracing" 现在我得到了日志,但是......我得到了与调试版本相同的结果。 为什么?

我正在尝试:

1)

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

2)

  <sources>  
    <source name="System.ServiceModel"  
            switchValue="Off, ActivityTracing"  
            propagateActivity="true" >  
      <listeners>  
        <add name="xml"/>  
      </listeners>  
    </source>  
    <source name="myUserTraceSource"  
            switchValue="Off, ActivityTracing">  
      <listeners>  
        <add name="xml"/>  
      </listeners>  
    </source>  
  </sources>  
  </sources>  

3)

  <system.diagnostics>  
  <sources>  
    <source name="System.ServiceModel"  
            switchValue="Off, ActivityTracing"  
            propagateActivity="true" >  
      <listeners>  
        <add name="TraceLog"/>  
      </listeners>  
    </source>   
    <source name="System.ServiceModel.MessageLogging"
            switchValue="Off, ActivityTracing" 
            propagateActivity="true">  
      <listeners>  
        <add name="xml"/>  
      </listeners>  
    </source>      
    <source name="myUserTraceSource"  
            switchValue="Off, ActivityTracing">  
      <listeners>  
        <add name="TraceLog"/>  
      </listeners>  
    </source>  
  </sources>  
  <sharedListeners>  
    <add name="TraceLog"  
          type="System.Diagnostics.XmlWriterTraceListener"  
                initializeData="C:\logs\Traces.svclog" />  
  </sharedListeners>  
  </system.diagnostics>

没成功://

WCF 跟踪建立在 System.Diagnostics 之上,每个 WCF 程序集都会发出不同的跟踪消息。 System.ServiceModel 是最常见的 WCF 跟踪源,它为大多数 WCF 活动发出跟踪。发出的信息级别由配置文件中的 switchValue 属性控制。

您看到 start/stop/transfer 跟踪消息也是因为 ActivityTracing 跟踪级别添加到 switchValue。如果您只留下警告,它应该可以正常工作。

有时,当服务的主机为 运行 时,生成的 svclog 文件可能看起来是空的(例如,如果托管在 IISExpress 下)。停止该站点,您将看到仅为警告及以上生成的消息。

例如,下面的诊断配置只捕获了 ArgumentNullException

<system.diagnostics>
    <sources>
      <source propagateActivity="false" name="System.ServiceModel"
        switchValue="Warning">
        <listeners>
          <add type="System.Diagnostics.DefaultTraceListener" name="Default">
            <filter type="" />
          </add>
          <add name="ServiceModelTraceListener">
            <filter type="" />
          </add>
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add initializeData="traces.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
        name="ServiceModelTraceListener" traceOutputOptions="None">
        <filter type="" />
      </add>
    </sharedListeners>
  </system.diagnostics>

Configuring Tracing 来自 MS 的文档列出了可用于跟踪源的不同跟踪级别。