1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.log4j.builders.filter;
18
19 import org.apache.log4j.bridge.FilterWrapper;
20 import org.apache.log4j.builders.AbstractBuilder;
21 import org.apache.log4j.builders.BooleanHolder;
22 import org.apache.log4j.builders.Holder;
23 import org.apache.log4j.config.PropertiesConfiguration;
24 import org.apache.log4j.spi.Filter;
25 import org.apache.log4j.xml.XmlConfiguration;
26 import org.apache.logging.log4j.Level;
27 import org.apache.logging.log4j.Logger;
28 import org.apache.logging.log4j.core.config.plugins.Plugin;
29 import org.apache.logging.log4j.core.filter.LevelMatchFilter;
30 import org.apache.logging.log4j.status.StatusLogger;
31 import org.w3c.dom.Element;
32
33 import java.util.Properties;
34
35 import static org.apache.log4j.builders.BuilderManager.CATEGORY;
36 import static org.apache.log4j.xml.XmlConfiguration.*;
37 import static org.apache.log4j.xml.XmlConfiguration.VALUE_ATTR;
38
39
40
41
42 @Plugin(name = "org.apache.log4j.varia.LevelMatchFilter", category = CATEGORY)
43 public class LevelMatchFilterBuilder extends AbstractBuilder implements FilterBuilder {
44
45 private static final Logger LOGGER = StatusLogger.getLogger();
46 private static final String LEVEL = "LevelToMatch";
47 private static final String ACCEPT_ON_MATCH = "AcceptOnMatch";
48
49 public LevelMatchFilterBuilder() {
50 }
51
52 public LevelMatchFilterBuilder(String prefix, Properties props) {
53 super(prefix, props);
54 }
55
56 @Override
57 public Filter parseFilter(Element filterElement, XmlConfiguration config) {
58 final Holder<String> level = new Holder<>();
59 final Holder<Boolean> acceptOnMatch = new BooleanHolder();
60 forEachElement(filterElement.getElementsByTagName("param"), (currentElement) -> {
61 if (currentElement.getTagName().equals("param")) {
62 switch (currentElement.getAttribute(NAME_ATTR)) {
63 case LEVEL:
64 level.set(currentElement.getAttribute(VALUE_ATTR));
65 break;
66 case ACCEPT_ON_MATCH:
67 acceptOnMatch.set(Boolean.parseBoolean(currentElement.getAttribute(VALUE_ATTR)));
68 break;
69 }
70 }
71 });
72 return createFilter(level.get(), acceptOnMatch.get());
73 }
74
75 @Override
76 public Filter parseFilter(PropertiesConfiguration config) {
77 String level = getProperty(LEVEL);
78 boolean acceptOnMatch = getBooleanProperty(ACCEPT_ON_MATCH);
79 return createFilter(level, acceptOnMatch);
80 }
81
82 private Filter createFilter(String level, boolean acceptOnMatch) {
83 Level lvl = Level.ERROR;
84 if (level != null) {
85 lvl = Level.toLevel(level, Level.ERROR);
86 }
87 org.apache.logging.log4j.core.Filter.Result onMatch = acceptOnMatch
88 ? org.apache.logging.log4j.core.Filter.Result.ACCEPT
89 : org.apache.logging.log4j.core.Filter.Result.DENY;
90 return new FilterWrapper(LevelMatchFilter.newBuilder()
91 .setLevel(lvl)
92 .setOnMatch(onMatch)
93 .setOnMismatch(org.apache.logging.log4j.core.Filter.Result.NEUTRAL)
94 .build());
95 }
96 }