@@ -62,7 +62,6 @@ public class EcsLayout extends AbstractStringLayout {
62
62
63
63
public static final Charset UTF_8 = Charset .forName ("UTF-8" );
64
64
private static final ObjectMessageJacksonSerializer JACKSON_SERIALIZER = ObjectMessageJacksonSerializer .Resolver .resolve ();
65
- private static final MdcSerializer MDC_SERIALIZER = MdcSerializer .Resolver .resolve ();
66
65
private static final MultiFormatHandler MULTI_FORMAT_HANDLER = MultiFormatHandler .Resolver .resolve ();
67
66
private static final boolean FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS = PropertiesUtil .getProperties ().getBooleanProperty (
68
67
"log4j2.formatMsgNoLookups" , false );
@@ -79,9 +78,10 @@ public class EcsLayout extends AbstractStringLayout {
79
78
private final boolean includeOrigin ;
80
79
private final PatternFormatter [] exceptionPatternFormatter ;
81
80
private final ConcurrentMap <Class <? extends MultiformatMessage >, Boolean > supportsJson = new ConcurrentHashMap <Class <? extends MultiformatMessage >, Boolean >();
81
+ private final MdcSerializer mdcSerializer ;
82
82
83
83
private EcsLayout (Configuration config , String serviceName , String serviceVersion , String serviceEnvironment , String serviceNodeName , String eventDataset , boolean includeMarkers ,
84
- KeyValuePair [] additionalFields , boolean includeOrigin , String exceptionPattern , boolean stackTraceAsArray ) {
84
+ KeyValuePair [] additionalFields , boolean includeOrigin , String exceptionPattern , boolean stackTraceAsArray , String mdcSerializerFullClassName ) {
85
85
super (config , UTF_8 , null , null );
86
86
this .serviceName = serviceName ;
87
87
this .serviceVersion = serviceVersion ;
@@ -109,6 +109,7 @@ private EcsLayout(Configuration config, String serviceName, String serviceVersio
109
109
} else {
110
110
exceptionPatternFormatter = null ;
111
111
}
112
+ mdcSerializer = MdcSerializerResolver .resolve (mdcSerializerFullClassName );
112
113
}
113
114
114
115
@ PluginBuilderFactory
@@ -193,7 +194,7 @@ private void serializeAdditionalFieldsAndMDC(LogEvent event, StringBuilder build
193
194
}
194
195
}
195
196
}
196
- MDC_SERIALIZER .serializeMdc (event , builder );
197
+ mdcSerializer .serializeMdc (event , builder );
197
198
}
198
199
199
200
private static void formatPattern (LogEvent event , PatternFormatter [] formatters , StringBuilder buffer ) {
@@ -377,6 +378,8 @@ public static class Builder implements org.apache.logging.log4j.core.util.Builde
377
378
private KeyValuePair [] additionalFields = new KeyValuePair []{};
378
379
@ PluginBuilderAttribute ("includeOrigin" )
379
380
private boolean includeOrigin = false ;
381
+ @ PluginBuilderAttribute ("mdcSerializer" )
382
+ private String mdcSerializerFullClassName = "" ;
380
383
381
384
Builder () {
382
385
}
@@ -428,6 +431,10 @@ public String getExceptionPattern() {
428
431
return exceptionPattern ;
429
432
}
430
433
434
+ public String getMdcSerializerFullClassName () {
435
+ return mdcSerializerFullClassName ;
436
+ }
437
+
431
438
/**
432
439
* Additional fields to set on each log event.
433
440
*
@@ -483,11 +490,16 @@ public EcsLayout.Builder setExceptionPattern(String exceptionPattern) {
483
490
return this ;
484
491
}
485
492
493
+ public EcsLayout .Builder setMdcSerializerFullClassName (String mdcSerializerFullClassName ) {
494
+ this .mdcSerializerFullClassName = mdcSerializerFullClassName ;
495
+ return this ;
496
+ }
497
+
486
498
@ Override
487
499
public EcsLayout build () {
488
500
return new EcsLayout (getConfiguration (), serviceName , serviceVersion , serviceEnvironment , serviceNodeName ,
489
501
EcsJsonSerializer .computeEventDataset (eventDataset , serviceName ),
490
- includeMarkers , additionalFields , includeOrigin , exceptionPattern , stackTraceAsArray );
502
+ includeMarkers , additionalFields , includeOrigin , exceptionPattern , stackTraceAsArray , mdcSerializerFullClassName );
491
503
}
492
504
}
493
505
}
0 commit comments