我有一个WCF服务,想启用日志记录。如Microsoft文档Configuring Message Logging中所述,我将以下内容放入Web.config:
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="messages"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\logs\messages.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
<system.serviceModel>
<diagnostics>
<messageLogging
logEntireMessage="true"
logMalformedMessages="false"
logMessagesAtServiceLevel="true"
logMessagesAtTransportLevel="false"
maxMessagesToLog="3000"
maxSizeOfMessageToLog="2000"/>
</diagnostics>
</system.serviceModel>
当最后一个日志中的消息数达到maxMessagesToLog = 3000时,如何旋转日志,例如写入messages1.svclog,然后写入messages2.svclog等?
我阅读了文章A Rolling XmlWriterTraceListener,但是当达到特定文件大小时,它将轮转日志文件。但是,当邮件数达到maxMessagesToLog时,WCF将停止记录。
答案 0 :(得分:0)
在到达maxMessagesToLog之前,我无法找出如何旋转日志文件。
我决定在每个午夜旋转日志文件。将maxMessagesToLog设置为max integer = 2147483647,一天中的消息数将永远不会超过该值。 我使用了WCF Forum中所述的自定义跟踪侦听器。
public class CustomTraceListener : XmlWriterTraceListener
{
public CustomTraceListener(string fileName)
: base(string.Format(fileName,
string.Format("{0}{1}{2}", DateTime.Now.Day, DateTime.Now.Month, DateTime.Now.Year)))
{
}
}
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="traceListener"
type="MyService.CustomTraceListener, MyService"
initializeData= "c:\wcflogs\messages_{0}.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
我创建的应用程序池的回收特定时间= 00:00:00
appcmd add apppool /name:MyApppool/enable32BitAppOnWin64:true /+recycling.periodicRestart.schedule.[value='00:00:00']
应用程序池的高级设置通过以下命令显示:
因此,该过程在每个午夜被回收,并且消息计数器从0开始。只要我每天少于20亿条消息,我的所有消息都将保存在日志文件中。