use of org.apache.log4j.spi.Filter in project logging-log4j2 by apache.
the class PropertiesConfiguration method parseAppenderFilters.
public Filter parseAppenderFilters(final Properties props, final String filterPrefix, final String appenderName) {
// extract filters and filter options from props into a hashtable mapping
// the property name defining the filter class to a list of pre-parsed
// name-value pairs associated to that filter
final int fIdx = filterPrefix.length();
final SortedMap<String, List<NameValue>> filters = new TreeMap<>();
final Enumeration<?> e = props.keys();
String name = "";
while (e.hasMoreElements()) {
final String key = (String) e.nextElement();
if (key.startsWith(filterPrefix)) {
final int dotIdx = key.indexOf('.', fIdx);
String filterKey = key;
if (dotIdx != -1) {
filterKey = key.substring(0, dotIdx);
name = key.substring(dotIdx + 1);
}
final List<NameValue> filterOpts = filters.computeIfAbsent(filterKey, k -> new ArrayList<>());
if (dotIdx != -1) {
final String value = OptionConverter.findAndSubst(key, props);
filterOpts.add(new NameValue(name, value));
}
}
}
Filter head = null;
Filter next = null;
for (final Map.Entry<String, List<NameValue>> entry : filters.entrySet()) {
final String clazz = props.getProperty(entry.getKey());
Filter filter = null;
if (clazz != null) {
filter = manager.parseFilter(clazz, entry.getKey(), props, this);
if (filter == null) {
LOGGER.debug("Filter key: [{}] class: [{}] props: {}", entry.getKey(), clazz, entry.getValue());
filter = buildFilter(clazz, appenderName, entry.getValue());
}
}
if (filter != null) {
if (head == null) {
head = filter;
} else {
next.setNext(filter);
}
next = filter;
}
}
return head;
}
use of org.apache.log4j.spi.Filter in project logging-log4j2 by apache.
the class ConsoleAppenderBuilder method parseAppender.
@Override
public Appender parseAppender(final Element appenderElement, final XmlConfiguration config) {
String name = getNameAttribute(appenderElement);
Holder<String> target = new Holder<>(SYSTEM_OUT);
Holder<Layout> layout = new Holder<>();
Holder<List<Filter>> filters = new Holder<>(new ArrayList<>());
Holder<String> level = new Holder<>();
forEachElement(appenderElement.getChildNodes(), (currentElement) -> {
switch(currentElement.getTagName()) {
case LAYOUT_TAG:
layout.set(config.parseLayout(currentElement));
break;
case FILTER_TAG:
filters.get().add(config.parseFilters(currentElement));
break;
case PARAM_TAG:
{
switch(getNameAttributeKey(currentElement)) {
case TARGET_PARAM:
{
String value = getValueAttribute(currentElement);
if (value == null) {
LOGGER.warn("No value supplied for target parameter. Defaulting to " + SYSTEM_OUT);
} else {
switch(value) {
case SYSTEM_OUT:
target.set(SYSTEM_OUT);
break;
case SYSTEM_ERR:
target.set(SYSTEM_ERR);
break;
default:
LOGGER.warn("Invalid value \"{}\" for target parameter. Using default of {}", value, SYSTEM_OUT);
}
}
break;
}
case THRESHOLD_PARAM:
{
String value = getValueAttribute(currentElement);
if (value == null) {
LOGGER.warn("No value supplied for Threshold parameter, ignoring.");
} else {
level.set(value);
}
break;
}
}
break;
}
}
});
Filter head = null;
Filter current = null;
for (Filter f : filters.get()) {
if (head == null) {
head = f;
current = f;
} else {
current.next = f;
current = f;
}
}
return createAppender(name, layout.get(), head, level.get(), target.get(), config);
}
use of org.apache.log4j.spi.Filter in project logging-log4j2 by apache.
the class FileAppenderBuilder method parseAppender.
@Override
public Appender parseAppender(final String name, final String appenderPrefix, final String layoutPrefix, final String filterPrefix, final Properties props, final PropertiesConfiguration configuration) {
Layout layout = configuration.parseLayout(layoutPrefix, name, props);
Filter filter = configuration.parseAppenderFilters(props, filterPrefix, name);
String level = getProperty(THRESHOLD_PARAM);
String fileName = getProperty(FILE_PARAM);
boolean append = getBooleanProperty(APPEND_PARAM);
boolean immediateFlush = false;
boolean bufferedIo = getBooleanProperty(BUFFERED_IO_PARAM);
int bufferSize = Integer.parseInt(getProperty(BUFFER_SIZE_PARAM, "8192"));
return createAppender(name, configuration, layout, filter, fileName, level, immediateFlush, append, bufferedIo, bufferSize);
}
use of org.apache.log4j.spi.Filter in project logging-log4j2 by apache.
the class AbstractBuilder method buildFilters.
protected org.apache.logging.log4j.core.Filter buildFilters(final String level, final Filter filter) {
if (level != null && filter != null) {
final List<org.apache.logging.log4j.core.Filter> filterList = new ArrayList<>();
final 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.getNext();
}
return CompositeFilter.createFilters(filterList.toArray(org.apache.logging.log4j.core.Filter.EMPTY_ARRAY));
} 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;
}
use of org.apache.log4j.spi.Filter in project logging-log4j2 by apache.
the class PropertyConfigurator method parseAppenderFilters.
void parseAppenderFilters(final Properties properties, final String appenderName, final Appender appender) {
// extract filters and filter options from props into a hashtable mapping
// the property name defining the filter class to a list of pre-parsed
// name-value pairs associated to that filter
final String filterPrefix = APPENDER_PREFIX + appenderName + ".filter.";
final int fIdx = filterPrefix.length();
final Hashtable filters = new Hashtable();
final Enumeration e = properties.keys();
String name = "";
while (e.hasMoreElements()) {
final String key = (String) e.nextElement();
if (key.startsWith(filterPrefix)) {
final int dotIdx = key.indexOf('.', fIdx);
String filterKey = key;
if (dotIdx != -1) {
filterKey = key.substring(0, dotIdx);
name = key.substring(dotIdx + 1);
}
Vector filterOpts = (Vector) filters.get(filterKey);
if (filterOpts == null) {
filterOpts = new Vector();
filters.put(filterKey, filterOpts);
}
if (dotIdx != -1) {
final String value = OptionConverter.findAndSubst(key, properties);
filterOpts.add(new NameValue(name, value));
}
}
}
// sort filters by IDs, insantiate filters, set filter options,
// add filters to the appender
final Enumeration g = new SortedKeyEnumeration(filters);
while (g.hasMoreElements()) {
final String key = (String) g.nextElement();
final String clazz = properties.getProperty(key);
if (clazz != null) {
LogLog.debug("Filter key: [" + key + "] class: [" + properties.getProperty(key) + "] props: " + filters.get(key));
final Filter filter = (Filter) OptionConverter.instantiateByClassName(clazz, Filter.class, null);
if (filter != null) {
final PropertySetter propSetter = new PropertySetter(filter);
final Vector v = (Vector) filters.get(key);
final Enumeration filterProps = v.elements();
while (filterProps.hasMoreElements()) {
final NameValue kv = (NameValue) filterProps.nextElement();
propSetter.setProperty(kv.key, kv.value);
}
propSetter.activate();
LogLog.debug("Adding filter of type [" + filter.getClass() + "] to appender named [" + appender.getName() + "].");
appender.addFilter(filter);
}
} else {
LogLog.warn("Missing class definition for filter: [" + key + "]");
}
}
}
Aggregations