12

我在 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 问题?

4

2 回答 2

10

由于我只有一个使用相同记录器的进程(IIS、w3wp.exe),因此通过删除锁定模型密钥解决了该问题。

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

既然在这里说:

如果您使用 RollingFileAppender,情况会变得更糟,因为多个进程可能会尝试同时开始滚动日志文件。RollingFileAppender 在滚动文件时完全忽略了锁定模型,滚动文件根本不兼容这种场景。

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

于 2012-05-28T09:31:11.660 回答
0

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

当你尝试这个时会发生什么

<datePattern value="yyyyMMdd" />

根据此处的示例。

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

于 2012-04-19T14:03:58.697 回答