Используете log4net, InterProcessLock и RollingFileAppender? - PullRequest
0 голосов
/ 21 февраля 2019

Я знаю, все рекомендации говорят "не делай этого". log4net FAQ (как указано в этом ответе https://stackoverflow.com/a/16966203/90236) говорит:

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

Что если я использую дату RollingMode?

<rollingStyle value="Date"/>

Если все процессы имеют одинаковую конфигурацию log4net, и мы ведем регистрацию только по дате, мы избегаем проблем с переименованием файлов журнала и других сложностей, которые могут возникнуть у RollingFileAppender.

Безопасно ли использовать RollingFileAppender из нескольких процессов вэто дело?

 <log4net>
   <appender name="appname" type="log4net.Appender.RollingFileAppender">
     <file value="..\log\applog" />
     <appendToFile value="true" />
     <lockingModel type="log4net.Appender.FileAppender+InterProcessLock" />
     <staticLogFileName value="false" />
     <rollingStyle value="Date"/>
     <datePattern value="'.'yyyy-MM-dd_HH'.log'" />
     <layout type="log4net.Layout.PatternLayout">
       <conversionPattern value="%date %level %property{threadId}/%thread [sid:%property{channelId}] %logger{1} - %message%newline" />
     </layout>
   </appender>

   <root>
     <level value="DEBUG" />
     <appender-ref ref="appname" />
   </root>
 </log4net>
...