public void rollover() throws RolloverFailure { // Inside this method it is guaranteed that the hereto active log file is // closed. // If maxIndex <= 0, then there is no file renaming to be done. if (maxIndex >= 0) { // Delete the oldest file, to keep Windows happy. File file = new File(fileNamePattern.convertInt(maxIndex)); if (file.exists()) { file.delete(); } // Map {(maxIndex - 1), ..., minIndex} to {maxIndex, ..., minIndex+1} for (int i = maxIndex - 1; i >= minIndex; i--) { String toRenameStr = fileNamePattern.convertInt(i); File toRename = new File(toRenameStr); // no point in trying to rename an inexistent file if (toRename.exists()) { util.rename(toRenameStr, fileNamePattern.convertInt(i + 1)); } else { addInfo("Skipping roll-over for inexistent file " + toRenameStr); } } // move active file name to min switch (compressionMode) { case NONE: util.rename(getActiveFileName(), fileNamePattern.convertInt(minIndex)); break; case GZ: compressor.compress(getActiveFileName(), fileNamePattern.convertInt(minIndex), null); break; case ZIP: compressor.compress( getActiveFileName(), fileNamePattern.convertInt(minIndex), zipEntryFileNamePattern.convert(new Date())); break; } } }
public void start() { util.setContext(this.context); if (fileNamePatternStr != null) { fileNamePattern = new FileNamePattern(fileNamePatternStr, this.context); determineCompressionMode(); } else { addError(FNP_NOT_SET); addError(CoreConstants.SEE_FNP_NOT_SET); throw new IllegalStateException(FNP_NOT_SET + CoreConstants.SEE_FNP_NOT_SET); } if (isParentPrudent()) { addError("Prudent mode is not supported with FixedWindowRollingPolicy."); addError(PRUDENT_MODE_UNSUPPORTED); throw new IllegalStateException("Prudent mode is not supported."); } if (getParentsRawFileProperty() == null) { addError("The File name property must be set before using this rolling policy."); addError(SEE_PARENT_FN_NOT_SET); throw new IllegalStateException("The \"File\" option must be set."); } if (maxIndex < minIndex) { addWarn("MaxIndex (" + maxIndex + ") cannot be smaller than MinIndex (" + minIndex + ")."); addWarn("Setting maxIndex to equal minIndex."); maxIndex = minIndex; } final int maxWindowSize = getMaxWindowSize(); if ((maxIndex - minIndex) > maxWindowSize) { addWarn("Large window sizes are not allowed."); maxIndex = minIndex + maxWindowSize; addWarn("MaxIndex reduced to " + maxIndex); } IntegerTokenConverter itc = fileNamePattern.getIntegerTokenConverter(); if (itc == null) { throw new IllegalStateException( "FileNamePattern [" + fileNamePattern.getPattern() + "] does not contain a valid IntegerToken"); } if (compressionMode == CompressionMode.ZIP) { String zipEntryFileNamePatternStr = transformFileNamePatternFromInt2Date(fileNamePatternStr); zipEntryFileNamePattern = new FileNamePattern(zipEntryFileNamePatternStr, context); } compressor = new Compressor(compressionMode); compressor.setContext(this.context); super.start(); }