1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.filter;
18
19 import org.apache.logging.log4j.Level;
20 import org.apache.logging.log4j.Marker;
21 import org.apache.logging.log4j.core.Filter;
22 import org.apache.logging.log4j.core.LogEvent;
23 import org.apache.logging.log4j.core.Logger;
24 import org.apache.logging.log4j.core.config.Node;
25 import org.apache.logging.log4j.core.config.plugins.Plugin;
26 import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
27 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
28 import org.apache.logging.log4j.message.Message;
29
30
31
32
33
34
35
36
37
38 @Plugin(name = "ThresholdFilter", category = Node.CATEGORY, elementType = Filter.ELEMENT_TYPE, printObject = true)
39 public final class ThresholdFilter extends AbstractFilter {
40
41 private static final long serialVersionUID = 1L;
42
43 private final Level level;
44
45 private ThresholdFilter(final Level level, final Result onMatch, final Result onMismatch) {
46 super(onMatch, onMismatch);
47 this.level = level;
48 }
49
50 @Override
51 public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
52 final Object... params) {
53 return filter(level);
54 }
55
56 @Override
57 public Result filter(final Logger logger, final Level level, final Marker marker, final Object msg,
58 final Throwable t) {
59 return filter(level);
60 }
61
62 @Override
63 public Result filter(final Logger logger, final Level level, final Marker marker, final Message msg,
64 final Throwable t) {
65 return filter(level);
66 }
67
68 @Override
69 public Result filter(final LogEvent event) {
70 return filter(event.getLevel());
71 }
72
73 private Result filter(final Level level) {
74 return level.isMoreSpecificThan(this.level) ? onMatch : onMismatch;
75 }
76
77 public Level getLevel() {
78 return level;
79 }
80
81 @Override
82 public String toString() {
83 return level.toString();
84 }
85
86
87
88
89
90
91
92
93 @PluginFactory
94 public static ThresholdFilter createFilter(
95 @PluginAttribute("level") final Level level,
96 @PluginAttribute("onMatch") final Result match,
97 @PluginAttribute("onMismatch") final Result mismatch) {
98 final Level actualLevel = level == null ? Level.ERROR : level;
99 final Result onMatch = match == null ? Result.NEUTRAL : match;
100 final Result onMismatch = mismatch == null ? Result.DENY : mismatch;
101 return new ThresholdFilter(actualLevel, onMatch, onMismatch);
102 }
103
104 }