| /* |
| * 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; |
| } |
| |
| } |