@@ -56,7 +56,7 @@ public class ScopedContext {
56
56
private static final ThreadLocal <Deque <Instance >> scopedContext = new ThreadLocal <>();
57
57
58
58
/**
59
- * Returns an immutable Map containing all the key/value pairs as Renderable objects.
59
+ * Returns an immutable Map containing all the key/value pairs as Object objects.
60
60
* @return An immutable copy of the Map at the current scope.
61
61
*/
62
62
private static Optional <Instance > getContext () {
@@ -99,9 +99,9 @@ private static void removeScopedContext() {
99
99
* @hidden
100
100
* Returns an unmodifiable copy of the current ScopedContext Map. This method should
101
101
* only be used by implementations of Log4j API.
102
- * @return the Map of Renderable objects.
102
+ * @return the Map of Object objects.
103
103
*/
104
- public static Map <String , Renderable > getContextMap () {
104
+ public static Map <String , Object > getContextMap () {
105
105
Optional <Instance > context = getContext ();
106
106
if (context .isPresent ()
107
107
&& context .get ().contextMap != null
@@ -129,13 +129,7 @@ public static int size() {
129
129
@ SuppressWarnings ("unchecked" )
130
130
public static <T > T get (String key ) {
131
131
Optional <Instance > context = getContext ();
132
- if (context .isPresent ()) {
133
- Renderable renderable = context .get ().contextMap .get (key );
134
- if (renderable != null ) {
135
- return (T ) renderable .getObject ();
136
- }
137
- }
138
- return null ;
132
+ return context .map (instance -> (T ) instance .contextMap .get (key )).orElse (null );
139
133
}
140
134
141
135
/**
@@ -146,9 +140,9 @@ public static <T> T get(String key) {
146
140
public static String getString (String key ) {
147
141
Optional <Instance > context = getContext ();
148
142
if (context .isPresent ()) {
149
- Renderable renderable = context .get ().contextMap .get (key );
150
- if (renderable != null ) {
151
- return renderable . render ();
143
+ Object obj = context .get ().contextMap .get (key );
144
+ if (obj != null ) {
145
+ return obj . toString ();
152
146
}
153
147
}
154
148
return null ;
@@ -161,9 +155,9 @@ public static String getString(String key) {
161
155
public static void addAll (Map <String , String > map ) {
162
156
Optional <Instance > context = getContext ();
163
157
if (context .isPresent ()) {
164
- Map <String , Renderable > contextMap = context .get ().contextMap ;
158
+ Map <String , Object > contextMap = context .get ().contextMap ;
165
159
if (contextMap != null && !contextMap .isEmpty ()) {
166
- contextMap .forEach ((key , value ) -> map .put (key , value .render ()));
160
+ contextMap .forEach ((key , value ) -> map .put (key , value .toString ()));
167
161
}
168
162
}
169
163
}
@@ -178,12 +172,11 @@ public static void addAll(Map<String, String> map) {
178
172
*/
179
173
public static Instance where (String key , Object value ) {
180
174
if (value != null ) {
181
- Renderable renderable = value instanceof Renderable ? (Renderable ) value : new ObjectRenderable (value );
182
175
Instance parent = getContext ().isPresent () ? getContext ().get () : null ;
183
- return new Instance (parent , key , renderable );
176
+ return new Instance (parent , key , value );
184
177
} else {
185
178
if (getContext ().isPresent ()) {
186
- Map <String , Renderable > map = getContextMap ();
179
+ Map <String , Object > map = getContextMap ();
187
180
map .remove (key );
188
181
return new Instance (map );
189
182
}
@@ -209,19 +202,18 @@ public static Instance where(String key, Supplier<Object> supplier) {
209
202
*/
210
203
public static Instance where (Map <String , ?> map ) {
211
204
if (map != null && !map .isEmpty ()) {
212
- Map <String , Renderable > renderableMap = new HashMap <>();
205
+ Map <String , Object > objectMap = new HashMap <>();
213
206
if (getContext ().isPresent ()) {
214
- renderableMap .putAll (getContext ().get ().contextMap );
207
+ objectMap .putAll (getContext ().get ().contextMap );
215
208
}
216
209
map .forEach ((key , value ) -> {
217
210
if (value == null || (value instanceof String && ((String ) value ).isEmpty ())) {
218
- renderableMap .remove (key );
211
+ objectMap .remove (key );
219
212
} else {
220
- renderableMap .put (
221
- key , value instanceof Renderable ? (Renderable ) value : new ObjectRenderable (value ));
213
+ objectMap .put (key , value );
222
214
}
223
215
});
224
- return new Instance (renderableMap );
216
+ return new Instance (objectMap );
225
217
} else {
226
218
return getContext ().isPresent () ? getContext ().get () : new Instance ();
227
219
}
@@ -235,15 +227,14 @@ public static Instance where(Map<String, ?> map) {
235
227
*/
236
228
public static void runWhere (String key , Object obj , Runnable op ) {
237
229
if (obj != null ) {
238
- Renderable renderable = obj instanceof Renderable ? (Renderable ) obj : new ObjectRenderable (obj );
239
- Map <String , Renderable > map = new HashMap <>();
230
+ Map <String , Object > map = new HashMap <>();
240
231
if (getContext ().isPresent ()) {
241
232
map .putAll (getContext ().get ().contextMap );
242
233
}
243
- map .put (key , renderable );
234
+ map .put (key , obj );
244
235
new Instance (map ).run (op );
245
236
} else {
246
- Map <String , Renderable > map = new HashMap <>();
237
+ Map <String , Object > map = new HashMap <>();
247
238
if (getContext ().isPresent ()) {
248
239
map .putAll (getContext ().get ().contextMap );
249
240
}
@@ -261,12 +252,11 @@ public static void runWhere(String key, Object obj, Runnable op) {
261
252
*/
262
253
public static Future <?> runWhere (String key , Object obj , ExecutorService executorService , Runnable op ) {
263
254
if (obj != null ) {
264
- Renderable renderable = obj instanceof Renderable ? (Renderable ) obj : new ObjectRenderable (obj );
265
- Map <String , Renderable > map = new HashMap <>();
255
+ Map <String , Object > map = new HashMap <>();
266
256
if (getContext ().isPresent ()) {
267
257
map .putAll (getContext ().get ().contextMap );
268
258
}
269
- map .put (key , renderable );
259
+ map .put (key , obj );
270
260
if (executorService != null ) {
271
261
return executorService .submit (new Runner (
272
262
new Instance (map ), ThreadContext .getContext (), ThreadContext .getImmutableStack (), op ));
@@ -275,7 +265,7 @@ public static Future<?> runWhere(String key, Object obj, ExecutorService executo
275
265
return CompletableFuture .completedFuture (0 );
276
266
}
277
267
} else {
278
- Map <String , Renderable > map = new HashMap <>();
268
+ Map <String , Object > map = new HashMap <>();
279
269
if (getContext ().isPresent ()) {
280
270
map .putAll (getContext ().get ().contextMap );
281
271
}
@@ -297,14 +287,12 @@ public static Future<?> runWhere(String key, Object obj, ExecutorService executo
297
287
*/
298
288
public static void runWhere (Map <String , ?> map , Runnable op ) {
299
289
if (map != null && !map .isEmpty ()) {
300
- Map <String , Renderable > renderableMap = new HashMap <>();
290
+ Map <String , Object > objectMap = new HashMap <>();
301
291
if (getContext ().isPresent ()) {
302
- renderableMap .putAll (getContext ().get ().contextMap );
292
+ objectMap .putAll (getContext ().get ().contextMap );
303
293
}
304
- map .forEach ((key , value ) -> {
305
- renderableMap .put (key , value instanceof Renderable ? (Renderable ) value : new ObjectRenderable (value ));
306
- });
307
- new Instance (renderableMap ).run (op );
294
+ objectMap .putAll (map );
295
+ new Instance (objectMap ).run (op );
308
296
} else {
309
297
op .run ();
310
298
}
@@ -318,15 +306,14 @@ public static void runWhere(Map<String, ?> map, Runnable op) {
318
306
*/
319
307
public static <R > R callWhere (String key , Object obj , Callable <R > op ) throws Exception {
320
308
if (obj != null ) {
321
- Renderable renderable = obj instanceof Renderable ? (Renderable ) obj : new ObjectRenderable (obj );
322
- Map <String , Renderable > map = new HashMap <>();
309
+ Map <String , Object > map = new HashMap <>();
323
310
if (getContext ().isPresent ()) {
324
311
map .putAll (getContext ().get ().contextMap );
325
312
}
326
- map .put (key , renderable );
313
+ map .put (key , obj );
327
314
return new Instance (map ).call (op );
328
315
} else {
329
- Map <String , Renderable > map = new HashMap <>();
316
+ Map <String , Object > map = new HashMap <>();
330
317
if (getContext ().isPresent ()) {
331
318
map .putAll (getContext ().get ().contextMap );
332
319
}
@@ -345,12 +332,11 @@ public static <R> R callWhere(String key, Object obj, Callable<R> op) throws Exc
345
332
public static <R > Future <R > callWhere (String key , Object obj , ExecutorService executorService , Callable <R > op )
346
333
throws Exception {
347
334
if (obj != null ) {
348
- Renderable renderable = obj instanceof Renderable ? (Renderable ) obj : new ObjectRenderable (obj );
349
- Map <String , Renderable > map = new HashMap <>();
335
+ Map <String , Object > map = new HashMap <>();
350
336
if (getContext ().isPresent ()) {
351
337
map .putAll (getContext ().get ().contextMap );
352
338
}
353
- map .put (key , renderable );
339
+ map .put (key , obj );
354
340
if (executorService != null ) {
355
341
return executorService .submit (new Caller <R >(
356
342
new Instance (map ), ThreadContext .getContext (), ThreadContext .getImmutableStack (), op ));
@@ -360,7 +346,7 @@ public static <R> Future<R> callWhere(String key, Object obj, ExecutorService ex
360
346
}
361
347
} else {
362
348
if (executorService != null ) {
363
- Map <String , Renderable > map = new HashMap <>();
349
+ Map <String , Object > map = new HashMap <>();
364
350
if (getContext ().isPresent ()) {
365
351
map .putAll (getContext ().get ().contextMap );
366
352
}
@@ -381,14 +367,12 @@ public static <R> Future<R> callWhere(String key, Object obj, ExecutorService ex
381
367
*/
382
368
public static <R > R callWhere (Map <String , ?> map , Callable <R > op ) throws Exception {
383
369
if (map != null && !map .isEmpty ()) {
384
- Map <String , Renderable > renderableMap = new HashMap <>();
370
+ Map <String , Object > objectMap = new HashMap <>();
385
371
if (getContext ().isPresent ()) {
386
- renderableMap .putAll (getContext ().get ().contextMap );
372
+ objectMap .putAll (getContext ().get ().contextMap );
387
373
}
388
- map .forEach ((key , value ) -> {
389
- renderableMap .put (key , value instanceof Renderable ? (Renderable ) value : new ObjectRenderable (value ));
390
- });
391
- return new Instance (renderableMap ).call (op );
374
+ objectMap .putAll (map );
375
+ return new Instance (objectMap ).call (op );
392
376
} else {
393
377
return op .call ();
394
378
}
@@ -398,8 +382,8 @@ public static class Instance {
398
382
399
383
private final Instance parent ;
400
384
private final String key ;
401
- private final Renderable value ;
402
- private final Map <String , Renderable > contextMap ;
385
+ private final Object value ;
386
+ private final Map <String , Object > contextMap ;
403
387
404
388
private Instance () {
405
389
this .parent = null ;
@@ -408,14 +392,14 @@ private Instance() {
408
392
this .contextMap = null ;
409
393
}
410
394
411
- private Instance (Map <String , Renderable > map ) {
395
+ private Instance (Map <String , Object > map ) {
412
396
this .parent = null ;
413
397
this .key = null ;
414
398
this .value = null ;
415
399
this .contextMap = map ;
416
400
}
417
401
418
- private Instance (Instance parent , String key , Renderable value ) {
402
+ private Instance (Instance parent , String key , Object value ) {
419
403
this .parent = parent ;
420
404
this .key = key ;
421
405
this .value = value ;
@@ -446,8 +430,7 @@ public Instance where(String key, Supplier<Object> supplier) {
446
430
447
431
private Instance addObject (String key , Object obj ) {
448
432
if (obj != null ) {
449
- Renderable renderable = obj instanceof Renderable ? (Renderable ) obj : new ObjectRenderable (obj );
450
- return new Instance (this , key , renderable );
433
+ return new Instance (this , key , obj );
451
434
}
452
435
return this ;
453
436
}
@@ -495,7 +478,7 @@ public <R> Future<R> call(ExecutorService executorService, Callable<R> op) {
495
478
}
496
479
497
480
private static class Runner implements Runnable {
498
- private final Map <String , Renderable > contextMap = new HashMap <>();
481
+ private final Map <String , Object > contextMap = new HashMap <>();
499
482
private final Map <String , String > threadContextMap ;
500
483
private final ThreadContext .ContextStack contextStack ;
501
484
private final Instance context ;
@@ -546,7 +529,7 @@ public void run() {
546
529
}
547
530
548
531
private static class Caller <R > implements Callable <R > {
549
- private final Map <String , Renderable > contextMap = new HashMap <>();
532
+ private final Map <String , Object > contextMap = new HashMap <>();
550
533
private final Instance context ;
551
534
private final Map <String , String > threadContextMap ;
552
535
private final ThreadContext .ContextStack contextStack ;
@@ -595,43 +578,4 @@ public R call() throws Exception {
595
578
}
596
579
}
597
580
}
598
-
599
- /**
600
- * Interface for converting Objects stored in the ContextScope to Strings for logging.
601
- *
602
- * Users implementing this interface are encouraged to make the render method as lightweight as possible,
603
- * Typically by creating the String representation of the object during its construction and just returning
604
- * the String.
605
- */
606
- public static interface Renderable {
607
- /**
608
- * Render the object as a String.
609
- * @return the String representation of the Object.
610
- */
611
- default String render () {
612
- return this .toString ();
613
- }
614
-
615
- default Object getObject () {
616
- return this ;
617
- }
618
- }
619
-
620
- private static class ObjectRenderable implements Renderable {
621
- private final Object object ;
622
-
623
- public ObjectRenderable (Object object ) {
624
- this .object = object ;
625
- }
626
-
627
- @ Override
628
- public String render () {
629
- return object .toString ();
630
- }
631
-
632
- @ Override
633
- public Object getObject () {
634
- return object ;
635
- }
636
- }
637
581
}
0 commit comments