代码之家  ›  专栏  ›  技术社区  ›  Michael Levy

使用log4net、进程间锁和RollingFileAppender?

  •  0
  • Michael Levy  · 技术社区  · 5 年前

    我知道所有的建议都说“不要这样做”。这个 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>
    
    0 回复  |  直到 5 年前