in log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.java [193:284]
private Map<String, String> createProperties(final String name, final Agent[] agents,
final Property[] properties, final int batchSize, String dataDir) {
final Map<String, String> props = new HashMap<>();
if ((agents == null || agents.length == 0) && (properties == null || properties.length == 0)) {
LOGGER.error("No Flume configuration provided");
throw new ConfigurationException("No Flume configuration provided");
}
if (agents != null && agents.length > 0 && properties != null && properties.length > 0) {
LOGGER.error("Agents and Flume configuration cannot both be specified");
throw new ConfigurationException("Agents and Flume configuration cannot both be specified");
}
if (agents != null && agents.length > 0) {
if (Strings.isNotEmpty(dataDir)) {
if (dataDir.equals(IN_MEMORY)) {
props.put("channel.type", "memory");
} else {
props.put("channel.type", "file");
if (!dataDir.endsWith(FILE_SEP)) {
dataDir = dataDir + FILE_SEP;
}
props.put("channel.checkpointDir", dataDir + "checkpoint");
props.put("channel.dataDirs", dataDir + "data");
}
} else {
props.put("channel.type", "file");
}
final StringBuilder sb = new StringBuilder();
String leading = Strings.EMPTY;
final int priority = agents.length;
for (int i = 0; i < priority; ++i) {
sb.append(leading).append("agent").append(i);
leading = " ";
final String prefix = "agent" + i;
props.put(prefix + ".type", "avro");
props.put(prefix + ".hostname", agents[i].getHost());
props.put(prefix + ".port", Integer.toString(agents[i].getPort()));
props.put(prefix + ".batch-size", Integer.toString(batchSize));
props.put("processor.priority." + prefix, Integer.toString(agents.length - i));
}
props.put("sinks", sb.toString());
props.put("processor.type", "failover");
} else {
String[] sinks = null;
for (final Property property : properties) {
final String key = property.getName();
if (Strings.isEmpty(key)) {
final String msg = "A property name must be provided";
LOGGER.error(msg);
throw new ConfigurationException(msg);
}
final String upperKey = toRootUpperCase(key);
if (upperKey.startsWith(toRootUpperCase(name))) {
final String msg =
"Specification of the agent name is not allowed in Flume Appender configuration: " + key;
LOGGER.error(msg);
throw new ConfigurationException(msg);
}
final String value = property.getValue();
if (Strings.isEmpty(value)) {
final String msg = "A value for property " + key + " must be provided";
LOGGER.error(msg);
throw new ConfigurationException(msg);
}
if (upperKey.equals("SINKS")) {
sinks = value.trim().split(" ");
}
props.put(key, value);
}
if (sinks == null || sinks.length == 0) {
final String msg = "At least one Sink must be specified";
LOGGER.error(msg);
throw new ConfigurationException(msg);
}
}
return props;
}