到达maxMessagesToLog时如何旋转WCF日志?

时间:2019-06-13 07:22:40

标签: wcf logging

我有一个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将停止记录。

1 个答案:

答案 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']

应用程序池的高级设置通过以下命令显示:

enter image description here

因此,该过程在每个午夜被回收,并且消息计数器从0开始。只要我每天少于20亿条消息,我的所有消息都将保存在日志文件中。