blob: 1c04e1d0a09f7bbf96bb811d393dd37518c256a5 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.log4j.rolling;
import org.apache.log4j.pattern.ExtrasFormattingInfo;
import org.apache.log4j.pattern.ExtrasPatternParser;
import org.apache.log4j.pattern.PatternConverter;
import org.apache.log4j.pattern.IntegerPatternConverter;
import org.apache.log4j.pattern.DatePatternConverter;
import org.apache.log4j.helpers.LogLog;
import org.apache.log4j.spi.OptionHandler;
import java.util.ArrayList;
import java.util.List;
/**
* Implements methods common to most, it not all, rolling
* policies. Currently such methods are limited to a compression mode
* getter/setter.
*
* @author Ceki Gülcü
* @author Curt Arnold
*/
public abstract class RollingPolicyBase
implements RollingPolicy, OptionHandler {
/**
* Error message.
*/
private static final String FNP_NOT_SET =
"The FileNamePattern option must be set before using RollingPolicy. ";
/**
* Reference for error message.
*/
private static final String SEE_FNP_NOT_SET =
"See also http://logging.apache.org/log4j/codes.html#tbr_fnp_not_set";
/**
* File name pattern converters.
*/
private PatternConverter[] patternConverters;
/**
* File name field specifiers.
*/
private ExtrasFormattingInfo[] patternFields;
/**
* File name pattern.
*/
private String fileNamePatternStr;
/**
* Active file name may be null.
* Duplicates FileAppender.file and should be removed.
*/
protected String activeFileName;
/**
* {@inheritDoc}
*/
public void activateOptions() {
// find out period from the filename pattern
if (fileNamePatternStr != null) {
parseFileNamePattern();
} else {
LogLog.warn(FNP_NOT_SET);
LogLog.warn(SEE_FNP_NOT_SET);
throw new IllegalStateException(FNP_NOT_SET + SEE_FNP_NOT_SET);
}
}
/**
* Set file name pattern.
* @param fnp file name pattern.
*/
public void setFileNamePattern(String fnp) {
fileNamePatternStr = fnp;
}
/**
* Get file name pattern.
* @return file name pattern.
*/
public String getFileNamePattern() {
return fileNamePatternStr;
}
/**
* ActiveFileName can be left unset, i.e. as null.
* @param afn active file name.
* @deprecated Duplicates FileAppender.file and should be removed
*/
public void setActiveFileName(String afn) {
activeFileName = afn;
}
/**
* Return the value of the <b>ActiveFile</b> option.
* @deprecated Duplicates FileAppender.file and should be removed
* @return active file name.
*/
public String getActiveFileName() {
return activeFileName;
}
/**
* Parse file name pattern.
*/
protected final void parseFileNamePattern() {
List converters = new ArrayList();
List fields = new ArrayList();
ExtrasPatternParser.parse(
fileNamePatternStr, converters, fields, null,
ExtrasPatternParser.getFileNamePatternRules());
patternConverters = new PatternConverter[converters.size()];
patternConverters =
(PatternConverter[]) converters.toArray(patternConverters);
patternFields = new ExtrasFormattingInfo[converters.size()];
patternFields = (ExtrasFormattingInfo[]) fields.toArray(patternFields);
}
/**
* Format file name.
*
* @param obj object to be evaluted in formatting, may not be null.
* @param buf string buffer to which formatted file name is appended, may not be null.
*/
protected final void formatFileName(
final Object obj, final StringBuffer buf) {
for (int i = 0; i < patternConverters.length; i++) {
int fieldStart = buf.length();
patternConverters[i].format(obj, buf);
if (patternFields[i] != null) {
patternFields[i].format(fieldStart, buf);
}
}
}
protected final PatternConverter getDatePatternConverter() {
for (int i = 0; i < patternConverters.length; i++) {
if (patternConverters[i] instanceof DatePatternConverter) {
return patternConverters[i];
}
}
return null;
}
protected final PatternConverter getIntegerPatternConverter() {
for (int i = 0; i < patternConverters.length; i++) {
if (patternConverters[i] instanceof IntegerPatternConverter) {
return patternConverters[i];
}
}
return null;
}
}