/** Called from rollover worker */ private void rolloverLogTask() { try { if (_isInit) flush(); } catch (Exception e) { log.log(Level.WARNING, e.toString(), e); } _isRollingOver = true; try { if (!_isInit) return; Path savedPath = null; long now = CurrentTime.getCurrentTime(); long lastPeriodEnd = _nextPeriodEnd; _nextPeriodEnd = nextRolloverTime(now); Path path = getPath(); synchronized (_logLock) { flushTempStream(); if (lastPeriodEnd <= now && lastPeriodEnd > 0) { closeLogStream(); savedPath = getSavedPath(lastPeriodEnd - 1); } else if (path != null && getRolloverSize() <= path.getLength()) { closeLogStream(); savedPath = getSavedPath(now); } } // archiving of path is outside of the synchronized block to // avoid freezing during archive if (savedPath != null) { movePathToArchive(savedPath); } } finally { synchronized (_logLock) { _isRollingOver = false; flushTempStream(); } _rolloverListener.requeue(_rolloverAlarm); } }
/** Initialize the log. */ public void init() throws IOException { long now = CurrentTime.getExactTime(); // server/0263 // _nextRolloverCheckTime = now + _rolloverCheckPeriod; Path path = getPath(); if (path != null) { path.getParent().mkdirs(); _rolloverPrefix = path.getTail(); long lastModified = path.getLastModified(); if (lastModified <= 0 || now < lastModified) { lastModified = now; } // _calendar.setGMTTime(lastModified); _nextPeriodEnd = nextRolloverTime(lastModified); } else { _nextPeriodEnd = nextRolloverTime(now); } if (_archiveFormat != null || getRolloverPeriod() <= 0) { } else if (_rolloverCron != null) _archiveFormat = _rolloverPrefix + ".%Y%m%d.%H"; else if (getRolloverPeriod() % DAY == 0) _archiveFormat = _rolloverPrefix + ".%Y%m%d"; else if (getRolloverPeriod() % HOUR == 0) _archiveFormat = _rolloverPrefix + ".%Y%m%d.%H"; else _archiveFormat = _rolloverPrefix + ".%Y%m%d.%H%M"; _isInit = true; _rolloverListener.requeue(_rolloverAlarm); rollover(); }