我在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问题?
发布于 2012-05-28 17:31:12
这个问题通过删除锁定模型键得到了解决,因为我只有一个进程(IIS、w3wp.exe)使用相同的记录器。
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>因为有人说here
如果您使用RollingFileAppender,情况会变得更糟,因为几个进程可能会尝试同时开始滚动日志文件。RollingFileAppender在滚动文件时完全忽略了锁定模型,因此滚动文件与此场景不兼容。
我认为你会得到不可预知的结果。
发布于 2012-04-19 22:03:59
我的猜测是,您在datePattern上使用-符号会混淆框架,因此在第一次滚动之后,任何日志都会触发滚动事件。
当你尝试这样做的时候会发生什么
<datePattern value="yyyyMMdd" />根据示例here。
要更改滚动周期,请调整DatePattern的值。例如,日期模式"yyyyMMdd“每天都会滚动。有关可用模式的列表,请参阅System.Globalization.DateTimeFormatInfo。
https://stackoverflow.com/questions/10218962
复制相似问题