logback RollingFileAppender在固定时间滚动

时间:2015-09-02 05:04:47

标签: logback appender

典型的logback appender配置是

<appender name="NAME"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>FILEPATH.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>FILEPATH.%d{yyyy-MM-dd-HH}.log</fileNamePattern>
        <maxHistory>24</maxHistory>
    </rollingPolicy>
    <encoder>
        <pattern>%msg%n</pattern>
        <charset>UTF-8</charset>
    </encoder>
</appender>

通常它对我来说很好。但是我发现当没有记录附加到记录器的日志时,它不会像滚动策略一样拆分日志文件。

请告诉我如何将其配置为每小时拆分日志文件,即使几小时内没有日志记录。如果任何小时都没有日志记录,我需要回溯以创建该小时的空文件。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,我想默认情况下,logback无法做到这一点。

我在积压的待办事项列表中发现了此问题,可以正确处理此问题:https://jira.qos.ch/browse/LOGBACK-554,并且它仍处于打开状态。

我现在所做的是基于以下内容实施我自己的滚动追加程序策略:https://ronanquillevere.github.io/2015/08/04/rolling-log-15-min.html

您可以扩展RollingFileAppender类并重写rollover方法,如下所示:

public class CustomAppender<E> extends RollingFileAppender<E>
{
    private static long start = System.currentTimeMillis();
    private int rollOverTimeInMinutes = 60;

    @Override
    public void rollover()
    {
        long currentTime = System.currentTimeMillis();
        int maxIntervalSinceLastLoggingInMillis = rollOverTimeInMinutes * 60 * 1000;

        if ((currentTime - start) >= maxIntervalSinceLastLoggingInMillis)
        {
            super.rollover();
            start = System.currentTimeMillis();
        }
    }
}

在登录文件xml配置中,您只需在appender属性上设置自定义pollicy:

<appender name="FILE" class="<your-package>.CustomAppender" >