【问题标题】:Capture try catch exceptions in wcf trace在 wcf 跟踪中捕获 try catch 异常
【发布时间】:2013-07-29 09:29:55
【问题描述】:

我用这段代码实现了 WCF 跟踪:

    <system.diagnostics>
    <sources>
      <source name="System.ServiceModel" switchValue="All"
        propagateActivity="true">
        <listeners>
          <add type="System.Diagnostics.DefaultTraceListener" name="Default">
            <filter type="" />
          </add>
          <add name="xml">
            <filter type="" />
          </add>
        </listeners>
      </source>
      <source name="CardSpace" switchValue="All">
        <listeners>
          <add type="System.Diagnostics.DefaultTraceListener" name="Default">
            <filter type="" />
          </add>
          <add name="xml">
            <filter type="" />
          </add>
        </listeners>
      </source>
      <source name="System.IO.Log" switchValue="All">
        <listeners>
          <add type="System.Diagnostics.DefaultTraceListener" name="Default">
            <filter type="" />
          </add>
          <add name="xml">
            <filter type="" />
          </add>
        </listeners>
      </source>
      <source name="System.Runtime.Serialization" switchValue="All">
        <listeners>
          <add type="System.Diagnostics.DefaultTraceListener" name="Default">
            <filter type="" />
          </add>
          <add name="xml">
            <filter type="" />
          </add>
        </listeners>
      </source>
      <source name="System.IdentityModel" switchValue="All">
        <listeners>
          <add type="System.Diagnostics.DefaultTraceListener" name="Default">
            <filter type="" />
          </add>
          <add name="xml">
            <filter type="" />
          </add>
        </listeners>
      </source>
      <source name="System.ServiceModel.MessageLogging" switchValue="All">
        <listeners>
          <add type="System.Diagnostics.DefaultTraceListener" name="Default">
            <filter type="" />
          </add>
          <add name="ServiceModelMessageLoggingListener">
            <filter type="" />
          </add>
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add initializeData="c:\wcflogs\trace.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
        name="Default" traceOutputOptions="Timestamp">
        <filter type="" />
      </add>
    </sharedListeners>
    <trace autoflush="true" />
  </system.diagnostics>

  <system.serviceModel>
    <diagnostics wmiProviderEnabled="true">
      <messageLogging logEntireMessage="true" logMalformedMessages="true"
        logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true"
        maxMessagesToLog="500" maxSizeOfMessageToLog="5000" />
    </diagnostics>
  </system.serviceModel>

但它只跟踪在 try/catch 块之外抛出的异常,所以当我想在我的跟踪中包含这个异常时,我需要删除 try/catch 块。有没有办法在我的 WCF 跟踪中也有 try {} 的这个异常?

【问题讨论】:

  • 我不这么认为,因为您的代码正在处理异常(通过 try/catch 块)。如果您想在 try/catch 块中捕获异常,请将它们记录到 catch 内的文件或数据库中。
  • 是的,我正在捕获异常并将它们记录到数据库中,但也许还有任何方法可以将它也包含在我的跟踪文件中

标签: asp.net wcf exception trace


【解决方案1】:

只需将另一个源添加到您的配置文件中。您应该仍然可以使用共享侦听器。我想。

<system.diagnostics>
  <sources>
   <source name="HandledExceptions" switchValue="All">
    <listeners>
     <add initializeData="HandledExceptions.svclog" type="System.Diagnostics.XmlWriterTraceListener" name="HandledExceptionListener">
      <filter type="" />
     </add>
    </listeners>
   </source>
  </sources>
  <trace autoflush="true" />
 </system.diagnostics>

然后在代码中写一个事件

catch (FaultException fe)
{
    TraceSource trace = new TraceSource("HandledExceptions");
    trace.TraceEvent(TraceEventType.Warning, 0, fe.Message + System.Environment.NewLine + fe.StackTrace);
    trace.Flush();
    trace.Close();

    throw fe;
}
catch (Exception e)
{
    TraceSource trace = new TraceSource("HandledExceptions");
    trace.TraceEvent(TraceEventType.Critical, 0, e.Message + System.Environment.NewLine + e.StackTrace);
    trace.Flush();
    trace.Close();

    throw new FaultException(e.Message);
}

【讨论】:

    猜你喜欢
    • 2020-02-28
    • 2015-06-21
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多