在WCF中记录错误的最佳方法

Kye*_*Kye 14 .net c# wcf logging

在开发WCF服务层时捕获和记录错误的最佳方法是什么?为什么?

我可以想到三种方式,

1)手动尝试/捕捉每种方法.

2)将责任留给WCF引擎.

3)使用第三方库,例如企业库策略注入/日志记录.

fsp*_*rit 24

我会实现自定义IErrorHandler并使用log4net

[AttributeUsage (AttributeTargets.Interface)]
public class ErrorPolicyBehaviorAttribute : Attribute, IContractBehavior, IErrorHandler
    {
    private ILog m_logger;

    #region IErrorHandler

    public void ProvideFault (Exception error, MessageVersion version, ref Message fault)
        {
        return;
        }

    public bool HandleError (Exception error)
        {
        m_logger.Error (error.Message, error);
        return true;
        }

    #endregion

    #region IContractBehavior

    public void ApplyDispatchBehavior (ContractDescription contractDescription, ServiceEndpoint endpoint, DispatchRuntime dispatchRuntime)
        {
        ...init logger
        ......Add this class to a list of dispatchRuntime.ChannelDispatcher.ErrorHandlers...
        }

    #endregion
    }
Run Code Online (Sandbox Code Playgroud)

此类还实现了IContractBehavior,因此您可以将其用作服务契约的Attribute.

[ErrorPolicyBehavior]
public interface IYourServiceContract
{ }
Run Code Online (Sandbox Code Playgroud)

log4net非常灵活,因此您可以根据需要记录所需内容.

  • 我更喜欢使用.NET跟踪 - 它已经内置在.NET框架中,并且对外部组件的依赖性较小. (4认同)
  • @marc_s.从.NET 1.1开始,我习惯了log4net,因为它提供了比标准.NET跟踪更多的灵活性.一个小而开源(这意味着你可以修复那里的错误,如果你发现任何)lib依赖并不是什么大问题. (2认同)

Dan*_*llo 10

可以将WCF配置为跨应用程序的所有组件输出流程里程碑的跟踪,例如操作调用,代码异常,警告和其他重要的处理事件.

以下是app.config启用跟踪的示例.

<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="TraceLog.svclog" />
    </sharedListeners>

  </system.diagnostics>
</configuration>
Run Code Online (Sandbox Code Playgroud)

您可以从MSDN中了解有关WCF跟踪的更多信息:配置跟踪.

Microsoft提供了一个服务跟踪查看器工具来读取.svclog文件.

除了跟踪之外,您可能还需要考虑使用log4net进行应用程序内日志记录.