4

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

4

3 回答 3

5

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

于 2009-01-06T22:28:59.000 回答
3

您必须从“哪些代码路径导致翻转例程?”这个问题来考虑这一点。一旦您知道如何达到该例程,您就可以决定如何触发它。

自定义附加程序可以做到吗?当然,但是在您通过它登录之前,appender 中的任何代码都不会运行,因此您又回到了原点。

至于“无论如何强制日志在午夜滚动而没有另一个线程唤醒并强制它滚动?”的问题,我会说这个问题相当于“是否可以强制日志滚动午夜没有运行任何代码?”。我不是想对此感到好笑,或者侮辱你,我只是想以一种希望为你解答的方式重述这个问题。:-)

解决这个问题的最简单方法是唤醒某些东西并记录以强制文件旋转。

于 2009-01-06T22:51:09.503 回答
0

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

<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>
于 2009-01-06T22:34:00.707 回答