【问题标题】:How to rotate WCF log when maxMessagesToLog is reached?达到 maxMessagesToLog 时如何旋转 WCF 日志?
【发布时间】:2019-06-13 07:22:40
【问题描述】:

我有 WCF 服务并希望启用日志记录。正如微软文档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 将停止记录。

【问题讨论】:

标签: wcf logging


【解决方案1】:

在达到 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亿条消息,我就会在日志文件中拥有所有消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-02
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    相关资源
    最近更新 更多