Have the appender keep the delay and retry count
git-svn-id: https://svn.apache.org/repos/asf/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers@1156959 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/flume/FlumeAvroAppender.java b/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/flume/FlumeAvroAppender.java
index 70004a0..8f1186b 100644
--- a/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/flume/FlumeAvroAppender.java
+++ b/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/flume/FlumeAvroAppender.java
@@ -48,9 +48,13 @@
private final String hostname;
+ private final int reconnectDelay;
+
+ private final int retries;
+
private FlumeAvroAppender(String name, Filters filters, Layout layout, boolean handleException,
String hostname, String includes, String excludes, String required, String mdcPrefix,
- String eventPrefix, boolean compress, FlumeAvroManager manager) {
+ String eventPrefix, boolean compress, int delay, int retries, FlumeAvroManager manager) {
super(name, filters, layout, handleException);
this.manager = manager;
this.mdcIncludes = includes;
@@ -60,6 +64,8 @@
this.mdcPrefix = mdcPrefix;
this.compressBody = compress;
this.hostname = hostname;
+ this.reconnectDelay = delay;
+ this.retries = retries;
}
public void append(LogEvent event) {
@@ -67,7 +73,7 @@
FlumeEvent flumeEvent = new FlumeEvent(event, hostname, mdcIncludes, mdcExcludes, mdcRequired, mdcPrefix,
eventPrefix, compressBody);
flumeEvent.setBody(getLayout().format(flumeEvent));
- manager.send(flumeEvent);
+ manager.send(flumeEvent, reconnectDelay, retries);
}
@Override
@@ -119,11 +125,11 @@
return null;
}
- FlumeAvroManager manager = FlumeAvroManager.getManager(agents, reconnectDelay, retries);
+ FlumeAvroManager manager = FlumeAvroManager.getManager(agents);
if (manager == null) {
return null;
}
return new FlumeAvroAppender(name, filters, layout, handleExceptions, hostname, includes,
- excludes, required, mdcPrefix, eventPrefix, compress, manager);
+ excludes, required, mdcPrefix, eventPrefix, compress, reconnectDelay, retries, manager);
}
}
diff --git a/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/flume/FlumeAvroManager.java b/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/flume/FlumeAvroManager.java
index 98d93c3..7089405 100644
--- a/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/flume/FlumeAvroManager.java
+++ b/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/flume/FlumeAvroManager.java
@@ -37,14 +37,10 @@
*/
public class FlumeAvroManager extends AbstractManager {
- private final int reconnectionDelay;
-
private FlumeEventAvroServer client;
private final Agent[] agents;
- private final int retries;
-
private static final int DEFAULT_RECONNECTS = 3;
private int current = 0;
@@ -58,16 +54,11 @@
private static Logger logger = StatusLogger.getLogger();
- public static FlumeAvroManager getManager(Agent[] agents, int delay, int retries) {
+ public static FlumeAvroManager getManager(Agent[] agents) {
if (agents == null || agents.length == 0) {
throw new IllegalArgumentException("At least one agent is required");
}
- if (delay == 0) {
- delay = DEFAULT_RECONNECTION_DELAY;
- }
- if (retries == 0) {
- retries = DEFAULT_RECONNECTS;
- }
+
StringBuilder sb = new StringBuilder("FlumeAvro[");
boolean first = true;
for (Agent agent : agents) {
@@ -78,19 +69,23 @@
first = false;
}
sb.append("]");
- return (FlumeAvroManager) getManager(sb.toString(), factory, new FactoryData(agents, delay, retries));
+ return (FlumeAvroManager) getManager(sb.toString(), factory, new FactoryData(agents));
}
- public FlumeAvroManager(String name, Agent[] agents, int delay, int retries) {
+ public FlumeAvroManager(String name, Agent[] agents) {
super(name);
this.agents = agents;
this.client = connect(agents);
- this.reconnectionDelay = delay;
- this.retries = retries;
}
- protected synchronized void send(FlumeEvent event) {
+ protected synchronized void send(FlumeEvent event, int delay, int retries) {
+ if (delay == 0) {
+ delay = DEFAULT_RECONNECTION_DELAY;
+ }
+ if (retries == 0) {
+ retries = DEFAULT_RECONNECTS;
+ }
AvroFlumeEvent avroEvent = AvroEventConvertUtil.toAvroEvent(event);
int i = 0;
@@ -106,7 +101,7 @@
logger.warn(msg, ex);
break;
}
- sleep();
+ sleep(delay);
}
} while (++i < retries);
@@ -131,7 +126,7 @@
logger.warn(warnMsg, ex);
break;
}
- sleep();
+ sleep(delay);
}
} while (++i < retries);
}
@@ -140,9 +135,9 @@
}
- private void sleep() {
+ private void sleep(int delay) {
try {
- Thread.sleep(reconnectionDelay);
+ Thread.sleep(delay);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
@@ -189,13 +184,9 @@
private static class FactoryData {
Agent[] agents;
- int delay;
- int retries;
- public FactoryData(Agent[] agents, int delay, int retries) {
+ public FactoryData(Agent[] agents) {
this.agents = agents;
- this.delay = delay;
- this.retries = retries;
}
}
@@ -204,7 +195,7 @@
public FlumeAvroManager createManager(String name, FactoryData data) {
try {
- return new FlumeAvroManager(name, data.agents, data.delay, data.retries);
+ return new FlumeAvroManager(name, data.agents);
} catch (Exception ex) {
logger.error("Could not create FlumeAvroManager", ex);
}