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 org.apache.logging.log4j.core.LogEvent;
20 import org.apache.logging.log4j.core.config.Configuration;
21 import org.apache.logging.log4j.core.config.plugins.Plugin;
22 import org.apache.logging.log4j.core.layout.PatternLayout;
23
24 import java.util.List;
25
26
27
28
29 @Plugin(name = "style", category = "Converter")
30 @ConverterKeys({"style" })
31 public final class StyleConverter extends LogEventPatternConverter {
32
33 private final List<PatternFormatter> formatters;
34
35 private final String style;
36
37
38
39
40
41
42 private StyleConverter(final List<PatternFormatter> formatters, final String styling) {
43 super("style", "style");
44 this.formatters = formatters;
45 this.style = styling;
46 }
47
48
49
50
51
52
53
54
55
56 public static StyleConverter newInstance(final Configuration config, final String[] options) {
57 if (options.length < 1) {
58 LOGGER.error("Incorrect number of options on style. Expected at least 1, received " + options.length);
59 return null;
60 }
61 if (options[0] == null) {
62 LOGGER.error("No pattern supplied on style");
63 return null;
64 }
65 if (options[1] == null) {
66 LOGGER.error("No style attributes provided");
67 return null;
68 }
69
70 final PatternParser parser = PatternLayout.createPatternParser(config);
71 final List<PatternFormatter> formatters = parser.parse(options[0]);
72 final String style = AnsiEscape.createSequence(options[1].split("\\s*,\\s*"));
73 return new StyleConverter(formatters, style);
74 }
75
76
77
78
79
80 @Override
81 public void format(final LogEvent event, final StringBuilder toAppendTo) {
82 final StringBuilder buf = new StringBuilder();
83 for (final PatternFormatter formatter : formatters) {
84 formatter.format(event, buf);
85 }
86
87 if (buf.length() > 0) {
88 toAppendTo.append(style).append(buf.toString()).append(AnsiEscape.getDefaultStyle());
89 }
90 }
91 }