Skip to content

Commit 302e7dc

Browse files
author
Piotr P. Karwasz
committed
Changes the priority of the attributes/elements
If an element of type "middleware" is present, the corresponding attribute of `<SplunkHttp>` is ignored. I replaced a manual search of the `Node` element with `@PluginElement` parameters, to eliminate errors in the logs (and simplify the code).
1 parent 0522759 commit 302e7dc

File tree

1 file changed

+7
-29
lines changed

1 file changed

+7
-29
lines changed

src/main/java/com/splunk/logging/HttpEventCollectorLog4jAppender.java

Lines changed: 7 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,11 @@
2525
import org.apache.logging.log4j.core.Layout;
2626
import org.apache.logging.log4j.core.LogEvent;
2727
import org.apache.logging.log4j.core.appender.AbstractAppender;
28-
import org.apache.logging.log4j.core.config.Node;
2928
import org.apache.logging.log4j.core.config.Property;
3029
import org.apache.logging.log4j.core.config.plugins.Plugin;
3130
import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
3231
import org.apache.logging.log4j.core.config.plugins.PluginElement;
3332
import 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;
3633
import org.apache.logging.log4j.core.layout.PatternLayout;
3734

3835
import 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

Comments
 (0)