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.regex.Matcher;
20 import java.util.regex.Pattern;
21
22 import org.apache.logging.log4j.Level;
23 import org.apache.logging.log4j.Marker;
24 import org.apache.logging.log4j.core.LogEvent;
25 import org.apache.logging.log4j.core.Logger;
26 import org.apache.logging.log4j.core.config.plugins.Plugin;
27 import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
28 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
29 import org.apache.logging.log4j.message.Message;
30
31
32
33
34
35
36
37
38
39 @Plugin(name = "RegexFilter", category = "Core", elementType = "filter", printObject = true)
40 public final class RegexFilter extends AbstractFilter {
41
42 private final Pattern pattern;
43 private final boolean useRawMessage;
44
45 private RegexFilter(final boolean raw, final Pattern pattern, final Result onMatch, final Result onMismatch) {
46 super(onMatch, onMismatch);
47 this.pattern = pattern;
48 this.useRawMessage = raw;
49 }
50
51 @Override
52 public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
53 final Object... params) {
54 return filter(msg);
55 }
56
57 @Override
58 public Result filter(final Logger logger, final Level level, final Marker marker, final Object msg,
59 final Throwable t) {
60 if (msg == null) {
61 return onMismatch;
62 }
63 return filter(msg.toString());
64 }
65
66 @Override
67 public Result filter(final Logger logger, final Level level, final Marker marker, final Message msg,
68 final Throwable t) {
69 if (msg == null) {
70 return onMismatch;
71 }
72 final String text = useRawMessage ? msg.getFormat() : msg.getFormattedMessage();
73 return filter(text);
74 }
75
76 @Override
77 public Result filter(final LogEvent event) {
78 final String text = useRawMessage ? event.getMessage().getFormat() : event.getMessage().getFormattedMessage();
79 return filter(text);
80 }
81
82 private Result filter(final String msg) {
83 if (msg == null) {
84 return onMismatch;
85 }
86 final Matcher m = pattern.matcher(msg);
87 return m.matches() ? onMatch : onMismatch;
88 }
89
90 @Override
91 public String toString() {
92 final StringBuilder sb = new StringBuilder();
93 sb.append("useRaw=").append(useRawMessage);
94 sb.append(", pattern=").append(pattern.toString());
95 return sb.toString();
96 }
97
98
99
100
101
102
103
104
105
106 @PluginFactory
107 public static RegexFilter createFilter(
108 @PluginAttribute("regex") final Pattern regex,
109 @PluginAttribute("useRawMsg") final Boolean useRawMsg,
110 @PluginAttribute("onMatch") final Result match,
111 @PluginAttribute("onMismatch") final Result mismatch) {
112
113 if (regex == null) {
114 LOGGER.error("A regular expression must be provided for RegexFilter");
115 return null;
116 }
117 return new RegexFilter(useRawMsg, regex, match, mismatch);
118 }
119
120 }