1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.log4j;
18
19 import java.util.HashMap;
20 import java.util.Hashtable;
21 import java.util.Map;
22
23 import org.apache.logging.log4j.ThreadContext;
24
25
26
27
28
29 public final class MDC {
30
31
32 private static ThreadLocal<Map<String, Object>> localMap =
33 new InheritableThreadLocal<Map<String, Object>>() {
34 @Override
35 protected Map<String, Object> initialValue() {
36 return new HashMap<String, Object>();
37 }
38
39 @Override
40 protected Map<String, Object> childValue(final Map<String, Object> parentValue) {
41 return parentValue == null ? new HashMap<String, Object>() : new HashMap<String, Object>(parentValue);
42 }
43 };
44
45 private MDC() {
46 }
47
48
49 public static void put(final String key, final String value) {
50 localMap.get().put(key, value);
51 ThreadContext.put(key, value);
52 }
53
54
55 public static void put(final String key, final Object value) {
56 localMap.get().put(key, value);
57 ThreadContext.put(key, value.toString());
58 }
59
60 public static Object get(final String key) {
61 return localMap.get().get(key);
62 }
63
64 public static void remove(final String key) {
65 localMap.get().remove(key);
66 ThreadContext.remove(key);
67 }
68
69 public static void clear() {
70 localMap.get().clear();
71 ThreadContext.clearMap();
72 }
73
74 public static Hashtable<String, Object> getContext() {
75 return new Hashtable<String, Object>(localMap.get());
76 }
77 }