blob: b86102cf43a718842a2ef97e9527bdf71efc4bd2 [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.builders;
import org.apache.log4j.bridge.FilterAdapter;
import org.apache.log4j.bridge.FilterWrapper;
import org.apache.log4j.helpers.OptionConverter;
import org.apache.log4j.spi.Filter;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.filter.CompositeFilter;
import org.apache.logging.log4j.core.filter.ThresholdFilter;
import org.apache.logging.log4j.status.StatusLogger;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
/**
* Base class for Log4j 1 component builders.
*/
public abstract class AbstractBuilder {
private static final Logger LOGGER = StatusLogger.getLogger();
protected static final String FILE_PARAM = "File";
protected static final String APPEND_PARAM = "Append";
protected static final String BUFFERED_IO_PARAM = "BufferedIO";
protected static final String BUFFER_SIZE_PARAM = "BufferSize";
protected static final String MAX_SIZE_PARAM = "MaxFileSize";
protected static final String MAX_BACKUP_INDEX = "MaxBackupIndex";
protected static final String RELATIVE = "RELATIVE";
private final String prefix;
private final Properties props;
public AbstractBuilder() {
this.prefix = null;
this.props = new Properties();
}
public AbstractBuilder(String prefix, Properties props) {
this.prefix = prefix + ".";
this.props = props;
}
public String getProperty(String key) {
return props.getProperty(prefix + key);
}
public String getProperty(String key, String defaultValue) {
return props.getProperty(prefix + key, defaultValue);
}
public boolean getBooleanProperty(String key) {
return Boolean.parseBoolean(props.getProperty(prefix + key, Boolean.FALSE.toString()));
}
public int getIntegerProperty(String key, int defaultValue) {
String value = props.getProperty(key);
try {
if (value != null) {
return Integer.parseInt(value);
}
} catch (Exception ex) {
LOGGER.warn("Error converting value {} of {} to an integer: {}", value, key, ex.getMessage());
}
return defaultValue;
}
public Properties getProperties() {
return props;
}
protected org.apache.logging.log4j.core.Filter buildFilters(String level, Filter filter) {
if (level != null && filter != null) {
List<org.apache.logging.log4j.core.Filter> filterList = new ArrayList<>();
org.apache.logging.log4j.core.Filter thresholdFilter =
ThresholdFilter.createFilter(OptionConverter.convertLevel(level, Level.TRACE),
org.apache.logging.log4j.core.Filter.Result.NEUTRAL,
org.apache.logging.log4j.core.Filter.Result.DENY);
filterList.add(thresholdFilter);
Filter f = filter;
while (f != null) {
if (filter instanceof FilterWrapper) {
filterList.add(((FilterWrapper) f).getFilter());
} else {
filterList.add(new FilterAdapter(f));
}
f = f.next;
}
return CompositeFilter.createFilters(filterList.toArray(new org.apache.logging.log4j.core.Filter[0]));
} else if (level != null) {
return ThresholdFilter.createFilter(OptionConverter.convertLevel(level, Level.TRACE),
org.apache.logging.log4j.core.Filter.Result.NEUTRAL,
org.apache.logging.log4j.core.Filter.Result.DENY);
} else if (filter != null) {
if (filter instanceof FilterWrapper) {
return ((FilterWrapper) filter).getFilter();
} else {
return new FilterAdapter(filter);
}
}
return null;
}
}