2012-04-18 49 views
10

我得在log4net.config为log4net的这种设置,允许多个线程写入同一个文件:log4net的+多线程+滚动文件附加目的地

<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <!-- Minimal locking to allow multiple threads to write to the same file --> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> 
    <file value="log\UI.log"/> 
    <appendToFile value="true"/> 
    <rollingStyle value="Date"/> 
    <maxSizeRollBackups value="30"/> 
    <datePattern value="-yyyyMMdd"/> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%newline%date [%thread] %-5level [%property{identity}] %logger{3} - %message%newline"/> 
    </layout> 
</appender> 

但午夜后的新创建日志文件被一直覆盖,因此文件中只有最后一个事件。服务器重新启动后,所有事情都会顺利进行,直到下一个午夜。
因此,任何人都可以说这是一个配置问题还是这只是一个log4net问题?

+0

任何解决方案让每个线程写入不同的文件(即每个线程都有它自己的文件)? – 2015-11-05 15:23:03

回答

10

由于我只有一个使用相同记录器的进程(IIS,w3wp.exe),所以通过删除锁定模型键来解决该问题。

<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> 

既然有人说here

如果使用RollingFileAppender进行事情变得更糟几个过程可以尝试同时启动滚动日志文件。 RollingFileAppender在滚动文件时完全忽略锁定模型,滚动文件与此场景根本不兼容。

我想你会得到不可预知的结果。

0

我的猜测是你在datePattern上使用 - 符号会使框架混淆,因此在第一次滚动之后,任何日志都会触发滚动事件。

当您尝试与此

<datePattern value="yyyyMMdd" /> 

%的例子here会发生什么。

要更改滚动周期,请调整DatePattern值。 对于 示例,“yyyyMMdd”的日期模式将每天滚动。请参阅 System.Globalization.DateTimeFormatInfo获取可用 模式的列表。