Logback에서 시간 기준 Rollover 시 해당 시간이 지나도 로그 이벤트가 발생하지 않는다면,


Rollover가 일어나지 않는다.


해결책으로는 해당 시간에 더미 (Dummy) 로그 이벤트를 발생시키는 방법이 있다.


더미 로그 이벤트를 발생시키는 것이 마음에 들지 않는다면,


다음과 같이 Appender의 rollover()를 직접 호출할 수도 있다.


@Component

public class LogbackRolloverHelper {


    private final Logger log = LoggerFactory.getLogger(getClass());


    @Scheduled(cron = "0 0 0 * * ?")

    public void rollover() {

        LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();

        for (ch.qos.logback.classic.Logger logger : loggerContext.getLoggerList()) {

            Iterator<Appender<ILoggingEvent>> appenderIterator = logger.iteratorForAppenders();

            while (appenderIterator.hasNext()) {

                Appender<ILoggingEvent> appender = appenderIterator.next();

                if (appender instanceof RollingFileAppender) {

                    RollingFileAppender rollingFileAppender = (RollingFileAppender) appender;

                    TriggeringPolicy triggeringPolicy = rollingFileAppender.getTriggeringPolicy();

                    if (triggeringPolicy instanceof TimeBasedRollingPolicy) {

                        if (triggeringPolicy.isTriggeringEvent(null, null)) {

                            rollingFileAppender.rollover();

                            log.debug("Tried to force to rollover log file for the appender '" + rollingFileAppender + "'.");

                        }

                    }

                }

            }

        }

    }


}


Reference:

http://stackoverflow.com/questions/22188936/timebasedrollingpolicy-not-rolling-unless-there-are-new-logs

Posted by izeye