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.plugins.Plugin;
21 import org.apache.logging.log4j.message.StringMapMessage;
22 import org.apache.logging.log4j.util.IndexedReadOnlyStringMap;
23
24
25
26
27
28
29
30 @Plugin(name = "MapPatternConverter", category = PatternConverter.CATEGORY)
31 @ConverterKeys({ "K", "map", "MAP" })
32 public final class MapPatternConverter extends LogEventPatternConverter {
33
34
35
36 private final String key;
37
38
39
40
41
42
43 private MapPatternConverter(final String[] options) {
44 super(options != null && options.length > 0 ? "MAP{" + options[0] + '}' : "MAP", "map");
45 key = options != null && options.length > 0 ? options[0] : null;
46 }
47
48
49
50
51
52
53
54 public static MapPatternConverter newInstance(final String[] options) {
55 return new MapPatternConverter(options);
56 }
57
58
59
60
61 @Override
62 public void format(final LogEvent event, final StringBuilder toAppendTo) {
63 StringMapMessage msg;
64 if (event.getMessage() instanceof StringMapMessage) {
65 msg = (StringMapMessage) event.getMessage();
66 } else {
67 return;
68 }
69 final IndexedReadOnlyStringMap sortedMap = msg.getIndexedReadOnlyStringMap();
70
71
72 if (key == null) {
73 if (sortedMap.isEmpty()) {
74 toAppendTo.append("{}");
75 return;
76 }
77 toAppendTo.append("{");
78 for (int i = 0; i < sortedMap.size(); i++) {
79 if (i > 0) {
80 toAppendTo.append(", ");
81 }
82 toAppendTo.append(sortedMap.getKeyAt(i)).append('=').append((String)sortedMap.getValueAt(i));
83 }
84 toAppendTo.append('}');
85 } else {
86
87 final String val = sortedMap.getValue(key);
88
89 if (val != null) {
90 toAppendTo.append(val);
91 }
92 }
93 }
94 }