2525import org .apache .logging .log4j .core .Layout ;
2626import org .apache .logging .log4j .core .LogEvent ;
2727import org .apache .logging .log4j .core .appender .AbstractAppender ;
28- import org .apache .logging .log4j .core .config .Node ;
2928import org .apache .logging .log4j .core .config .Property ;
3029import org .apache .logging .log4j .core .config .plugins .Plugin ;
3130import org .apache .logging .log4j .core .config .plugins .PluginAttribute ;
3231import org .apache .logging .log4j .core .config .plugins .PluginElement ;
3332import org .apache .logging .log4j .core .config .plugins .PluginFactory ;
34- import org .apache .logging .log4j .core .config .plugins .PluginNode ;
35- import org .apache .logging .log4j .core .config .plugins .util .PluginType ;
3633import org .apache .logging .log4j .core .layout .PatternLayout ;
3734
3835import com .splunk .logging .HttpEventCollectorMiddleware .HttpSenderMiddleware ;
@@ -147,9 +144,12 @@ public static HttpEventCollectorLog4jAppender createAppender(
147144 @ PluginAttribute ("batch_interval" ) final String batchInterval ,
148145 @ PluginAttribute ("retries_on_error" ) final String retriesOnError ,
149146 @ PluginAttribute ("send_mode" ) final String sendMode ,
147+ @ PluginElement (MIDDLEWARE_TYPE ) HttpSenderMiddleware middleware ,
150148 @ PluginAttribute (MIDDLEWARE_TYPE ) final String middlewareClassName ,
151149 @ PluginAttribute ("disableCertificateValidation" ) final String disableCertificateValidation ,
150+ @ PluginElement (BODY_SERIALIZER_TYPE ) EventBodySerializer eventBodySerializer ,
152151 @ PluginAttribute (BODY_SERIALIZER_TYPE ) final String eventBodySerializerClassName ,
152+ @ PluginElement (HEADER_SERIALIZER_TYPE ) EventHeaderSerializer eventHeaderSerializer ,
153153 @ PluginAttribute (HEADER_SERIALIZER_TYPE ) final String eventHeaderSerializerClassName ,
154154 @ PluginAttribute (value = "includeLoggerName" , defaultBoolean = true ) final boolean includeLoggerName ,
155155 @ PluginAttribute (value = "includeThreadName" , defaultBoolean = true ) final boolean includeThreadName ,
@@ -161,8 +161,7 @@ public static HttpEventCollectorLog4jAppender createAppender(
161161 @ PluginAttribute (value = "read_timeout" , defaultLong = HttpEventCollectorSender .TimeoutSettings .DEFAULT_READ_TIMEOUT ) final long readTimeout ,
162162 @ PluginAttribute (value = "write_timeout" , defaultLong = HttpEventCollectorSender .TimeoutSettings .DEFAULT_WRITE_TIMEOUT ) final long writeTimeout ,
163163 @ PluginElement ("Layout" ) Layout <? extends Serializable > layout ,
164- @ PluginElement ("Filter" ) final Filter filter ,
165- @ PluginNode final Node node
164+ @ PluginElement ("Filter" ) final Filter filter
166165 )
167166 {
168167 // The raw endpoint presumes that a single post is a single event.
@@ -206,45 +205,24 @@ public static HttpEventCollectorLog4jAppender createAppender(
206205 .build ();
207206 }
208207
209- // Retrieve the additional elements through Log4j plugin mechanism first
210- HttpSenderMiddleware middleware = null ;
211- EventBodySerializer eventBodySerializer = null ;
212- EventHeaderSerializer eventHeaderSerializer = null ;
213- for (final Node child : node .getChildren ()) {
214- final PluginType < ? > pluginType = child .getType ();
215- final Object component = child .getObject ();
216- switch (pluginType .getElementName ()) {
217- case MIDDLEWARE_TYPE :
218- middleware = (HttpSenderMiddleware ) component ;
219- break ;
220- case BODY_SERIALIZER_TYPE :
221- eventBodySerializer = (EventBodySerializer ) component ;
222- break ;
223- case HEADER_SERIALIZER_TYPE :
224- eventHeaderSerializer = (EventHeaderSerializer ) component ;
225- break ;
226- default :
227- }
228- }
229-
230208 // Fallback on instantiating classes
231- if (middlewareClassName != null && !middlewareClassName .isEmpty ()) {
209+ if (middleware == null && middlewareClassName != null && !middlewareClassName .isEmpty ()) {
232210 try {
233211 middleware = (HttpSenderMiddleware ) Class .forName (middlewareClassName ).newInstance ();
234212 } catch (Exception e ) {
235213 LOGGER .warn ("The middleware {} could not be instantiated." , middlewareClassName , e );
236214 }
237215 }
238216
239- if (eventBodySerializerClassName != null && !eventBodySerializerClassName .isEmpty ()) {
217+ if (eventBodySerializer == null && eventBodySerializerClassName != null && !eventBodySerializerClassName .isEmpty ()) {
240218 try {
241219 eventBodySerializer = (EventBodySerializer ) Class .forName (eventBodySerializerClassName ).newInstance ();
242220 } catch (final Exception e ) {
243221 LOGGER .warn ("The event body serializer {} could not be instantiated." , eventBodySerializerClassName , e );
244222 }
245223 }
246224
247- if (eventHeaderSerializerClassName != null && !eventHeaderSerializerClassName .isEmpty ()) {
225+ if (eventHeaderSerializer == null && eventHeaderSerializerClassName != null && !eventHeaderSerializerClassName .isEmpty ()) {
248226 try {
249227 eventHeaderSerializer = (EventHeaderSerializer ) Class .forName (eventHeaderSerializerClassName ).newInstance ();
250228 } catch (final Exception e ) {
0 commit comments