我在log4net.config中有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 :(得分:10)
通过删除锁定模型密钥解决了这个问题,因为我只有一个使用相同记录器的进程(IIS,w3wp.exe)。
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
因为有人说here:
如果使用RollingFileAppender,事情会变得更糟,因为多个进程可能会尝试同时开始滚动日志文件。 RollingFileAppender在滚动文件时完全忽略锁定模型,滚动文件与此方案完全不兼容。
我认为你会得到不可预测的结果。
答案 1 :(得分:0)
我的猜测是你在datePattern
上使用 - 符号会使框架混乱,因此在第一次滚动后任何日志都会触发滚动事件。
使用
尝试此操作时会发生什么<datePattern value="yyyyMMdd" />
根据示例here。
要更改滚动周期,请调整DatePattern值。 :用于 例如,日期模式“yyyyMMdd”将每天滚动。请参阅 System.Globalization.DateTimeFormatInfo获取可用列表 图案。