强制Log4Net RollingFileAppender滚动

时间:2009-01-06 17:20:26

标签: log4net rollingfileappender

根据Log4Net documentation,RollingFileAppender仅在记录消息时滚动日志文件。我需要登录到这个文件,但每天都将它导入另一个数据库。我不能使用数据库appender,因为我需要文件,我必须将数据从日志文件转换到数据库(它不是直接复制)。问题是如果在午夜之后没有日志活动,则日志不会滚动。导入器查找前几天的文件(我无法更改此代码),因此如果没有活动且日志未滚动,则导入程序找不到该文件。无论如何强制日志在午夜滚动而没有另一个线程唤醒并迫使它滚动?自定义appender可以这样做吗?如果可能,我想避免这种情况。

3 个答案:

答案 0 :(得分:5)

编写一个Windows服务,该服务在午夜之后触发事件,使用相同的配置写入虚拟日志条目。

答案 1 :(得分:3)

你必须从“什么代码路径导致翻转例程?”这一问题的角度考虑这个问题。一旦你知道如何达到这个例程,你就可以决定如何触发它。

自定义appender能做到吗?当然,但是在你通过它登录之前,appender中的代码都不会运行,所以你回到原点。

至于问题“无论如何强制日志在午夜滚动而没有另一个线程被唤醒并迫使它滚动?”,我会说这个问题等同于“是否有可能强迫登录在午夜滚动而没有运行任何代码?“我不是想搞笑,或是侮辱你,我只是想以一种有希望为你回答它的方式来重述这个问题。 : - )

解决此问题的最简单方法是唤醒并登录以强制文件旋转。

答案 2 :(得分:0)

根据RollingFileAppender documentation您可以将其设置为每天滚动,请参阅此配置:

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="logfile" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <datePattern value="yyyyMMdd" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>