我希望能够在数据库中记录消息信息,我正在尝试决定如何做到最好。是否可以将WCF日志记录机制配置为写入数据库而不是文件?感谢。
答案 0 :(得分:9)
你需要做两件事:
#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下载代码)。< / p>
答案 1 :(得分:0)
如果您不需要整个SOAP消息,我建议使用log4net和自定义IParameterInspector或IDispatchMessageInspector实现,因为在这种情况下,您可以只写入您需要的日志。 否则,请采用marc_s的解决方案。
答案 2 :(得分:-1)
您可以使用Log4Net