Search in sources :

Example 6 with Filter

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;
}
Also used : Filter(org.apache.log4j.spi.Filter) ArrayList(java.util.ArrayList) List(java.util.List) TreeMap(java.util.TreeMap) HashMap(java.util.HashMap) Map(java.util.Map) TreeMap(java.util.TreeMap) SortedMap(java.util.SortedMap)

Example 7 with Filter

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);
}
Also used : Layout(org.apache.log4j.Layout) Filter(org.apache.log4j.spi.Filter) Holder(org.apache.log4j.builders.Holder) ArrayList(java.util.ArrayList) List(java.util.List)

Example 8 with Filter

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);
}
Also used : Layout(org.apache.log4j.Layout) Filter(org.apache.log4j.spi.Filter)

Example 9 with Filter

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;
}
Also used : FilterWrapper(org.apache.log4j.bridge.FilterWrapper) CompositeFilter(org.apache.logging.log4j.core.filter.CompositeFilter) ThresholdFilter(org.apache.logging.log4j.core.filter.ThresholdFilter) Filter(org.apache.log4j.spi.Filter) ArrayList(java.util.ArrayList) FilterAdapter(org.apache.log4j.bridge.FilterAdapter)

Example 10 with Filter

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 + "]");
        }
    }
}
Also used : Enumeration(java.util.Enumeration) Filter(org.apache.log4j.spi.Filter) Hashtable(java.util.Hashtable) PropertySetter(org.apache.log4j.config.PropertySetter) Vector(java.util.Vector)

Aggregations

Filter (org.apache.log4j.spi.Filter)31 Appender (org.apache.log4j.Appender)14 Layout (org.apache.log4j.Layout)9 LoggingEvent (org.apache.log4j.spi.LoggingEvent)7 ArrayList (java.util.ArrayList)5 WriterAppender (org.apache.log4j.WriterAppender)5 Enumeration (java.util.Enumeration)4 List (java.util.List)4 Logger (org.apache.log4j.Logger)4 FileAppender (org.apache.log4j.FileAppender)3 PatternLayout (org.apache.log4j.PatternLayout)3 FilterWrapper (org.apache.log4j.bridge.FilterWrapper)3 PropertySetter (org.apache.log4j.config.PropertySetter)3 ErrorHandler (org.apache.log4j.spi.ErrorHandler)3 LevelMatchFilter (org.apache.log4j.varia.LevelMatchFilter)3 LevelRangeFilter (org.apache.log4j.varia.LevelRangeFilter)3 NullAppender (org.apache.log4j.varia.NullAppender)3 IOException (java.io.IOException)2 HashMap (java.util.HashMap)2 HashSet (java.util.HashSet)2