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.message.Message;
23 import org.apache.logging.log4j.message.MultiformatMessage;
24 import org.apache.logging.log4j.util.StringBuilderFormattable;
25
26
27
28
29 @Plugin(name = "MessagePatternConverter", category = PatternConverter.CATEGORY)
30 @ConverterKeys({ "m", "msg", "message" })
31 public final class MessagePatternConverter extends LogEventPatternConverter {
32
33 private final String[] formats;
34 private final Configuration config;
35
36
37
38
39
40 private MessagePatternConverter(final Configuration config, final String[] options) {
41 super("Message", "message");
42 formats = options;
43 this.config = config;
44 }
45
46
47
48
49
50
51
52
53 public static MessagePatternConverter newInstance(final Configuration config, final String[] options) {
54 return new MessagePatternConverter(config, options);
55 }
56
57
58
59
60 @Override
61 public void format(final LogEvent event, final StringBuilder toAppendTo) {
62 final Message msg = event.getMessage();
63 if (msg instanceof StringBuilderFormattable) {
64 final int offset = toAppendTo.length();
65 ((StringBuilderFormattable) msg).formatTo(toAppendTo);
66
67
68 if (config != null) {
69 for (int i = offset; i < toAppendTo.length() - 1; i++) {
70 if (toAppendTo.charAt(i) == '$' && toAppendTo.charAt(i + 1) == '{') {
71 final String value = toAppendTo.substring(offset, toAppendTo.length());
72 toAppendTo.setLength(offset);
73 toAppendTo.append(config.getStrSubstitutor().replace(event, value));
74 }
75 }
76 }
77 return;
78 }
79 if (msg != null) {
80 String result;
81 if (msg instanceof MultiformatMessage) {
82 result = ((MultiformatMessage) msg).getFormattedMessage(formats);
83 } else {
84 result = msg.getFormattedMessage();
85 }
86 if (result != null) {
87 toAppendTo.append(config != null && result.contains("${") ?
88 config.getStrSubstitutor().replace(event, result) : result);
89 } else {
90 toAppendTo.append("null");
91 }
92 }
93 }
94 }