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.Map;
20 import java.util.Set;
21 import java.util.TreeSet;
22
23 import org.apache.logging.log4j.core.LogEvent;
24 import org.apache.logging.log4j.core.config.plugins.Plugin;
25
26
27
28
29
30
31
32
33 @Plugin(name = "MdcPatternConverter", category = PatternConverter.CATEGORY)
34 @ConverterKeys({ "X", "mdc", "MDC" })
35 public final class MdcPatternConverter extends LogEventPatternConverter {
36
37
38
39 private final String key;
40
41
42
43
44
45
46 private MdcPatternConverter(final String[] options) {
47 super(options != null && options.length > 0 ? "MDC{" + options[0] + '}' : "MDC", "mdc");
48 key = options != null && options.length > 0 ? options[0] : null;
49 }
50
51
52
53
54
55
56
57 public static MdcPatternConverter newInstance(final String[] options) {
58 return new MdcPatternConverter(options);
59 }
60
61
62
63
64 @Override
65 public void format(final LogEvent event, final StringBuilder toAppendTo) {
66 final Map<String, String> contextMap = event.getContextMap();
67
68
69 if (key == null) {
70
71
72 if (contextMap == null || contextMap.isEmpty()) {
73 toAppendTo.append("{}");
74 return;
75 }
76 final StringBuilder sb = new StringBuilder("{");
77 final Set<String> keys = new TreeSet<String>(contextMap.keySet());
78 for (final String key : keys) {
79 if (sb.length() > 1) {
80 sb.append(", ");
81 }
82 sb.append(key).append('=').append(contextMap.get(key));
83
84 }
85 sb.append('}');
86 toAppendTo.append(sb);
87 } else if (contextMap != null) {
88
89 final Object val = contextMap.get(key);
90
91 if (val != null) {
92 toAppendTo.append(val);
93 }
94 }
95 }
96 }