CustomRolloverLogbackAppender.java

package emissary.util;

import emissary.config.ConfigUtil;
import emissary.config.Configurator;

import ch.qos.logback.core.rolling.RollingFileAppender;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;

public class CustomRolloverLogbackAppender<E> extends RollingFileAppender<E> {
    private long start = System.currentTimeMillis();
    private int rolloverTime = 15;
    private boolean isConfigured = false;

    protected static final Logger logger = LoggerFactory.getLogger(CustomRolloverLogbackAppender.class);

    public void configure() {
        try {
            Configurator configG = ConfigUtil.getConfigInfo(getClass());
            rolloverTime = configG.findIntEntry("ROLLOVER_TIME_MINUTES", rolloverTime);
        } catch (IOException e) {
            logger.error("Could not read from the config for the CustomRolloverLogbackAppender ", e);
        }
    }

    @Override
    public void rollover() {

        if (!isConfigured) {
            configure();
            isConfigured = true;
        }

        long currentTime = System.currentTimeMillis();
        int maxIntervalSinceLastLoggingInMillis = rolloverTime * 60 * 1000;

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