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 final Level level;
42
43 private ThresholdFilter(final Level level, final Result onMatch, final Result onMismatch) {
44 super(onMatch, onMismatch);
45 this.level = level;
46 }
47
48 @Override
49 public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
50 final Object... params) {
51 return filter(level);
52 }
53
54 @Override
55 public Result filter(final Logger logger, final Level level, final Marker marker, final Object msg,
56 final Throwable t) {
57 return filter(level);
58 }
59
60 @Override
61 public Result filter(final Logger logger, final Level level, final Marker marker, final Message msg,
62 final Throwable t) {
63 return filter(level);
64 }
65
66 @Override
67 public Result filter(final LogEvent event) {
68 return filter(event.getLevel());
69 }
70
71 private Result filter(final Level level) {
72 return level.isMoreSpecificThan(this.level) ? onMatch : onMismatch;
73 }
74
75 public Level getLevel() {
76 return level;
77 }
78
79 @Override
80 public String toString() {
81 return level.toString();
82 }
83
84
85
86
87
88
89
90
91 @PluginFactory
92 public static ThresholdFilter createFilter(
93 @PluginAttribute("level") final Level level,
94 @PluginAttribute("onMatch") final Result match,
95 @PluginAttribute("onMismatch") final Result mismatch) {
96 final Level actualLevel = level == null ? Level.ERROR : level;
97 final Result onMatch = match == null ? Result.NEUTRAL : match;
98 final Result onMismatch = mismatch == null ? Result.DENY : mismatch;
99 return new ThresholdFilter(actualLevel, onMatch, onMismatch);
100 }
101
102 }