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