1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.logging.log4j.core.pattern;
19
20 import java.util.List;
21
22 import org.apache.logging.log4j.core.LogEvent;
23 import org.apache.logging.log4j.core.appender.AbstractAppender;
24 import org.apache.logging.log4j.core.config.Configuration;
25 import org.apache.logging.log4j.core.config.plugins.Plugin;
26 import org.apache.logging.log4j.core.layout.PatternLayout;
27
28
29
30
31
32
33
34
35
36
37 @Plugin(name = "maxLength", category = PatternConverter.CATEGORY)
38 @ConverterKeys({"maxLength", "maxLen"})
39 public final class MaxLengthConverter extends LogEventPatternConverter {
40
41
42
43
44
45
46
47
48 public static MaxLengthConverter newInstance(final Configuration config, final String[] options) {
49 if (options.length != 2) {
50 LOGGER.error("Incorrect number of options on maxLength: expected 2 received {}: {}", options.length,
51 options);
52 return null;
53 }
54 if (options[0] == null) {
55 LOGGER.error("No pattern supplied on maxLength");
56 return null;
57 }
58 if (options[1] == null) {
59 LOGGER.error("No length supplied on maxLength");
60 return null;
61 }
62 final PatternParser parser = PatternLayout.createPatternParser(config);
63 final List<PatternFormatter> formatters = parser.parse(options[0]);
64 return new MaxLengthConverter(formatters, AbstractAppender.parseInt(options[1], 100));
65 }
66
67
68 private final List<PatternFormatter> formatters;
69 private final int maxLength;
70
71
72
73
74
75
76
77 private MaxLengthConverter(final List<PatternFormatter> formatters, final int maxLength) {
78 super("MaxLength", "maxLength");
79 this.maxLength = maxLength;
80 this.formatters = formatters;
81 LOGGER.trace("new MaxLengthConverter with {}", maxLength);
82 }
83
84
85 @Override
86 public void format(final LogEvent event, final StringBuilder toAppendTo) {
87 final StringBuilder buf = new StringBuilder();
88 for (final PatternFormatter formatter : formatters) {
89 formatter.format(event, buf);
90 if (buf.length() > maxLength) {
91 break;
92 }
93 }
94 if (buf.length() > maxLength) {
95 buf.setLength(maxLength);
96 if (maxLength > 20) {
97 buf.append("...");
98 }
99 }
100 toAppendTo.append(buf);
101 }
102
103 }