3

A typical logback appender configuration is

<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>

Usually it works fine to me. But I found that it will not split log file as the rollingPolicy specified when there's no log appended to the logger respected.

Please tell me How I can configure it to split log file for every hours even there's no log record for some hours. If there's no log record for any hour, I need logback to create an empty file for that hour.

terry
  • 341
  • 2
  • 6
  • 13
  • possible duplicate of [TimeBasedRollingPolicy not rolling unless there are new logs](http://stackoverflow.com/questions/22188936/timebasedrollingpolicy-not-rolling-unless-there-are-new-logs) – sheltem Sep 02 '15 at 08:29

1 Answers1

1

I was with the same problem and I guess logback doesn't able to do it per default.

I found this issue at logback backlog to handle exactly with this: https://jira.qos.ch/browse/LOGBACK-554 and it`s still open.

What I did for now was implement my own rolling appender policy, based on it: https://ronanquillevere.github.io/2015/08/04/rolling-log-15-min.html

You can extend the RollingFileAppender class and override the rollover method, like this:

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();
        }
    }
}

And on logback file xml config, you just set your custom pollicy on appender property:

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