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 @Plugin(name = "MarkerFilter", category = Node.CATEGORY, elementType = Filter.ELEMENT_TYPE, printObject = true)
35 public final class MarkerFilter extends AbstractFilter {
36
37 private final String name;
38
39 private MarkerFilter(final String name, final Result onMatch, final Result onMismatch) {
40 super(onMatch, onMismatch);
41 this.name = name;
42 }
43
44 @Override
45 public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
46 final Object... params) {
47 return filter(marker);
48 }
49
50 @Override
51 public Result filter(final Logger logger, final Level level, final Marker marker, final Object msg,
52 final Throwable t) {
53 return filter(marker);
54 }
55
56 @Override
57 public Result filter(final Logger logger, final Level level, final Marker marker, final Message msg,
58 final Throwable t) {
59 return filter(marker);
60 }
61
62 @Override
63 public Result filter(final LogEvent event) {
64 return filter(event.getMarker());
65 }
66
67 private Result filter(final Marker marker) {
68 return marker != null && marker.isInstanceOf(name) ? onMatch : onMismatch;
69 }
70
71 @Override
72 public String toString() {
73 return name;
74 }
75
76
77
78
79
80
81
82
83 @PluginFactory
84 public static MarkerFilter createFilter(
85 @PluginAttribute("marker") final String marker,
86 @PluginAttribute("onMatch") final Result match,
87 @PluginAttribute("onMismatch") final Result mismatch) {
88
89 if (marker == null) {
90 LOGGER.error("A marker must be provided for MarkerFilter");
91 return null;
92 }
93 return new MarkerFilter(marker, match, mismatch);
94 }
95
96 }