Как вращать журнал WCF при достижении maxMessagesToLog? - PullRequest
1 голос
/ 13 июня 2019

У меня есть служба WCF и я хочу включить ведение журнала. Как описано в документации Microsoft Настройка ведения журнала сообщений , я вставил в файл 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>

Как повернуть журнал, например записать в messages1.svclog, messages2.svclog и т. Д., Когда число сообщений в последнем журнале достигло maxMessagesToLog = 3000?

Я прочитал статью Rolling XmlWriterTraceListener , но при этом файл журнала поворачивается при достижении определенного размера файла. Однако, когда количество сообщений достигнет maxMessagesToLog, WCF прекратит ведение журнала.

1 Ответ

0 голосов
/ 14 июня 2019

Мне не удалось выяснить, как вращать файл журнала до того, как будет достигнуто значение maxMessagesToLog.

Я решил поворачивать файл журнала каждую полночь.Если для maxMessagesToLog задать значение max integer = 2147483647, количество сообщений за один день никогда не превысит это значение.Я использовал пользовательский прослушиватель трассировки, как описано на форуме WCF .

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>

. Я создал свой пул приложений с Recycling Specific Times = 00: 00: 00

appcmd add apppool /name:MyApppool/enable32BitAppOnWin64:true /+recycling.periodicRestart.schedule.[value='00:00:00']

Расширенные настройки пула приложений выглядят с этой командой следующим образом:

enter image description here

Поэтому процесс перезапускается каждую полночь, а счетчик сообщенийначинается с 0. Пока у меня менее 2 миллиардов сообщений в день, все сообщения будут храниться в файле журнала.

...