1 package org.slf4j.impl;
2
3 import java.util.HashMap;
4 import java.util.Map;
5 import java.util.Set;
6
7 import org.slf4j.spi.MDCAdapter;
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 public class LogbackMDCAdapter implements MDCAdapter {
23
24
25
26
27 final CopyOnInheritThreadLocal copyOnInheritThreadLocal = new CopyOnInheritThreadLocal();
28
29 LogbackMDCAdapter() {
30 }
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 public void put(String key, String val) throws IllegalArgumentException {
49 if (key == null) {
50 throw new IllegalArgumentException("key cannot be null");
51 }
52
53 HashMap<String, String> oldMap = copyOnInheritThreadLocal.get();
54
55 HashMap<String, String> newMap = new HashMap<String, String>();
56 if (oldMap != null) {
57 newMap.putAll(oldMap);
58 }
59
60 copyOnInheritThreadLocal.set(newMap);
61 newMap.put(key, val);
62 }
63
64
65
66
67
68
69 public String get(String key) {
70 HashMap<String, String> hashMap = copyOnInheritThreadLocal.get();
71
72 if ((hashMap != null) && (key != null)) {
73 return hashMap.get(key);
74 } else {
75 return null;
76 }
77 }
78
79
80
81
82
83
84
85
86
87 public void remove(String key) {
88 HashMap<String, String> oldMap = copyOnInheritThreadLocal.get();
89
90 HashMap<String, String> newMap = new HashMap<String, String>();
91 if (oldMap != null) {
92 newMap.putAll(oldMap);
93 }
94
95 copyOnInheritThreadLocal.set(newMap);
96 newMap.remove(key);
97 }
98
99
100
101
102 public void clear() {
103 HashMap<String, String> hashMap = copyOnInheritThreadLocal.get();
104
105 if (hashMap != null) {
106 hashMap.clear();
107 copyOnInheritThreadLocal.remove();
108 }
109 }
110
111
112
113
114
115 public Map<String, String> getPropertyMap() {
116 return copyOnInheritThreadLocal.get();
117 }
118
119
120
121
122
123 public Map getCopyOfContextMap() {
124 HashMap<String, String> hashMap = copyOnInheritThreadLocal.get();
125 if (hashMap == null) {
126 return null;
127 } else {
128 return new HashMap<String, String>(hashMap);
129 }
130 }
131
132
133
134
135
136 public Set<String> getKeys() {
137 HashMap<String, String> hashMap = copyOnInheritThreadLocal.get();
138
139 if (hashMap != null) {
140 return hashMap.keySet();
141 } else {
142 return null;
143 }
144 }
145
146 @SuppressWarnings("unchecked")
147 public void setContextMap(Map contextMap) {
148 HashMap<String, String> oldMap = copyOnInheritThreadLocal.get();
149
150 HashMap<String, String> newMap = new HashMap<String, String>();
151 newMap.putAll(contextMap);
152
153
154 copyOnInheritThreadLocal.set(newMap);
155
156
157 if (oldMap != null) {
158 oldMap.clear();
159 oldMap = null;
160 }
161 }
162 }