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.List;
20
21 import org.apache.logging.log4j.core.LogEvent;
22 import org.apache.logging.log4j.util.PerformanceSensitive;
23
24
25
26
27 @PerformanceSensitive("allocation")
28 public abstract class EqualsBaseReplacementConverter extends LogEventPatternConverter {
29 private final List<PatternFormatter> formatters;
30 private final List<PatternFormatter> substitutionFormatters;
31 private final String substitution;
32 private final String testString;
33
34
35
36
37
38
39
40
41
42
43
44 protected EqualsBaseReplacementConverter(final String name, final String style,
45 final List<PatternFormatter> formatters, final String testString,
46 final String substitution, final PatternParser parser) {
47 super(name, style);
48 this.testString = testString;
49 this.substitution = substitution;
50 this.formatters = formatters;
51
52
53 substitutionFormatters = substitution.contains("%") ? parser.parse(substitution) : null;
54 }
55
56
57
58
59 @Override
60 public void format(final LogEvent event, final StringBuilder toAppendTo) {
61 final int initialSize = toAppendTo.length();
62 for (int i = 0; i < formatters.size(); i++) {
63 final PatternFormatter formatter = formatters.get(i);
64 formatter.format(event, toAppendTo);
65 }
66 if (equals(testString, toAppendTo, initialSize, toAppendTo.length() - initialSize)) {
67 toAppendTo.setLength(initialSize);
68 parseSubstitution(event, toAppendTo);
69 }
70 }
71
72
73
74
75
76
77
78
79
80
81 protected abstract boolean equals(String str, StringBuilder buff, int from, int len);
82
83
84
85
86
87
88
89 void parseSubstitution(final LogEvent event, final StringBuilder substitutionBuffer) {
90 if (substitutionFormatters != null) {
91 for (int i = 0; i < substitutionFormatters.size(); i++) {
92 final PatternFormatter formatter = substitutionFormatters.get(i);
93 formatter.format(event, substitutionBuffer);
94 }
95 } else {
96 substitutionBuffer.append(substitution);
97 }
98 }
99 }