How can I enable WCF logging so that it writes to a Database?

后端 未结 3 663
梦谈多话
梦谈多话 2021-01-12 03:59

I\'d like to be able to log message information in a database, and I\'m trying to decide how best to do that. Is it possible to configure the WCF logging mechanisms to write

相关标签:
3条回答
  • 2021-01-12 04:06

    If you don't need the whole SOAP-message, I would suggest to use log4net with custom IParameterInspector or IDispatchMessageInspector implementation, cause in this case you can write to log only what you need. Otherwise, take marc_s's solution.

    0 讨论(0)
  • 2021-01-12 04:10

    You can use Log4Net

    0 讨论(0)
  • 2021-01-12 04:28

    You need to have two things:

    • a proper config to enable .NET tracing
    • a trace listener to capture the trace messages and store them in a database

    For #1:
    You need to turn on tracing in WCF first - you need an entry in <system.serviceModel> that enables tracing:

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

    Next, you need to configure .NET tracing as such:

    <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>
    

    Here, instead of the WebTraceListener, or other pre-defined listeners, you can also plug in your own database-oriented trace listener.

    For #2:
    You can - of course - write your own SqlTraceListener - or you can use one of the many ready-made solutions out there, for instance this one here (download the code from Codeplex).

    0 讨论(0)
提交回复
热议问题