【问题标题】:How can I enable WCF logging so that it writes to a Database?如何启用 WCF 日志记录以便它写入数据库?
【发布时间】:2010-12-27 19:01:11
【问题描述】:

我希望能够在数据库中记录消息信息,并且我正在尝试确定如何最好地做到这一点。是否可以将 WCF 日志记录机制配置为写入数据库而不是文件?谢谢。

【问题讨论】:

标签: database wcf logging performance


【解决方案1】:

你需要有两件事:

  • 启用 .NET 跟踪的正确配置
  • 一个跟踪侦听器,用于捕获跟踪消息并将它们存储在数据库中

#1:
您需要先在 WCF 中打开跟踪 - 您需要在 <system.serviceModel> 中启用跟踪:

<system.serviceModel>
   <diagnostics>
      <messageLogging
          logEntireMessage="true"
          logMalformedMessages="false"
          logMessagesAtServiceLevel="true"
          logMessagesAtTransportLevel="false"
          maxMessagesToLog="300000"
          maxSizeOfMessageToLog="200000"/>
    </diagnostics>
</system.serviceModel>

接下来,您需要像这样配置 .NET 跟踪:

<system.diagnostics>
   <sources>
      <source name="System.ServiceModel" 
              switchValue="Information, ActivityTracing" 
              propagateActivity="true">
         <listeners>
            <add name="xml" />
         </listeners>
      </source>
      <source name="System.ServiceModel.MessageLogging">
         <listeners>
             <add name="xml" />
         </listeners>
      </source>
   </sources>
   <sharedListeners>
       <add name="xml" type="WcfTrace.Trace.WebTraceListener,WcfTrace.Trace" />
   </sharedListeners>
</system.diagnostics>

在这里,您还可以插入自己的面向数据库的跟踪侦听器,而不是 WebTraceListener 或其他预定义的侦听器。

对于 #2:
您当然可以 - 编写自己的 SqlTraceListener - 或者您可以使用许多现成的解决方案之一,例如 this one here(从 Codeplex 下载代码)。

【讨论】:

    【解决方案2】:

    如果您不需要整个 SOAP 消息,我建议使用带有自定义 IParameterInspector 或 IDispatchMessageInspector 实现的 log4net,因为在这种情况下,您可以只写入您需要的内容。 否则,采取marc_s的解决方案。

    【讨论】:

      【解决方案3】:

      您可以使用Log4Net

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-31
        • 1970-01-01
        • 2012-03-25
        • 2013-08-01
        • 2017-01-14
        • 1970-01-01
        • 2022-07-06
        • 1970-01-01
        相关资源
        最近更新 更多