1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.pattern;
18
19 import java.util.regex.Pattern;
20
21 import org.apache.logging.log4j.Logger;
22 import org.apache.logging.log4j.core.Core;
23 import org.apache.logging.log4j.core.config.plugins.Plugin;
24 import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
25 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
26 import org.apache.logging.log4j.status.StatusLogger;
27
28
29
30
31 @Plugin(name = "replace", category = Core.CATEGORY_NAME, printObject = true)
32 public final class RegexReplacement {
33
34 private static final Logger LOGGER = StatusLogger.getLogger();
35
36 private final Pattern pattern;
37
38 private final String substitution;
39
40
41
42
43
44
45
46 private RegexReplacement(final Pattern pattern, final String substitution) {
47 this.pattern = pattern;
48 this.substitution = substitution;
49 }
50
51
52
53
54
55
56 public String format(final String msg) {
57 return pattern.matcher(msg).replaceAll(substitution);
58 }
59
60 @Override
61 public String toString() {
62 return "replace(regex=" + pattern.pattern() + ", replacement=" + substitution + ')';
63 }
64
65
66
67
68
69
70
71 @PluginFactory
72 public static RegexReplacement createRegexReplacement(
73 @PluginAttribute("regex") final Pattern regex,
74 @PluginAttribute("replacement") final String replacement) {
75 if (regex == null) {
76 LOGGER.error("A regular expression is required for replacement");
77 return null;
78 }
79 if (replacement == null) {
80 LOGGER.error("A replacement string is required to perform replacement");
81 }
82
83 return new RegexReplacement(regex, replacement);
84 }
85
86 }