in log4j-core/src/main/java/org/apache/logging/log4j/core/config/properties/PropertiesConfigurationBuilder.java [86:197]
public PropertiesConfiguration build() {
for (final String key : rootProperties.stringPropertyNames()) {
if (!key.contains(".")) {
builder.addRootProperty(key, rootProperties.getProperty(key));
}
}
builder
.setStatusLevel(Level.toLevel(rootProperties.getProperty(STATUS_KEY), Level.ERROR))
.setShutdownHook(rootProperties.getProperty(SHUTDOWN_HOOK))
.setShutdownTimeout(Long.parseLong(rootProperties.getProperty(SHUTDOWN_TIMEOUT, "0")), TimeUnit.MILLISECONDS)
.setVerbosity(rootProperties.getProperty(VERBOSE))
.setDestination(rootProperties.getProperty(DEST))
.setPackages(rootProperties.getProperty(PACKAGES))
.setConfigurationName(rootProperties.getProperty(CONFIG_NAME))
.setMonitorInterval(rootProperties.getProperty(MONITOR_INTERVAL, "0"))
.setAdvertiser(rootProperties.getProperty(ADVERTISER_KEY));
final Properties propertyPlaceholders = PropertiesUtil.extractSubset(rootProperties, "property");
for (final String key : propertyPlaceholders.stringPropertyNames()) {
builder.addProperty(key, propertyPlaceholders.getProperty(key));
}
final Map<String, Properties> scripts = PropertiesUtil.partitionOnCommonPrefixes(
PropertiesUtil.extractSubset(rootProperties, "script"));
for (final Map.Entry<String, Properties> entry : scripts.entrySet()) {
final Properties scriptProps = entry.getValue();
final String type = (String) scriptProps.remove("type");
if (type == null) {
throw new ConfigurationException("No type provided for script - must be Script or ScriptFile");
}
if (type.equalsIgnoreCase("script")) {
builder.add(createScript(scriptProps));
} else {
builder.add(createScriptFile(scriptProps));
}
}
final Properties levelProps = PropertiesUtil.extractSubset(rootProperties, "customLevel");
if (levelProps.size() > 0) {
for (final String key : levelProps.stringPropertyNames()) {
builder.add(builder.newCustomLevel(key, Integers.parseInt(levelProps.getProperty(key))));
}
}
final String filterProp = rootProperties.getProperty("filters");
if (filterProp != null) {
final String[] filterNames = filterProp.split(",");
for (final String filterName : filterNames) {
final String name = filterName.trim();
builder.add(createFilter(name, PropertiesUtil.extractSubset(rootProperties, "filter." + name)));
}
} else {
final Map<String, Properties> filters = PropertiesUtil
.partitionOnCommonPrefixes(PropertiesUtil.extractSubset(rootProperties, "filter"));
for (final Map.Entry<String, Properties> entry : filters.entrySet()) {
builder.add(createFilter(entry.getKey().trim(), entry.getValue()));
}
}
final String appenderProp = rootProperties.getProperty("appenders");
if (appenderProp != null) {
final String[] appenderNames = appenderProp.split(",");
for (final String appenderName : appenderNames) {
final String name = appenderName.trim();
builder.add(createAppender(appenderName.trim(),
PropertiesUtil.extractSubset(rootProperties, "appender." + name)));
}
} else {
final Map<String, Properties> appenders = PropertiesUtil
.partitionOnCommonPrefixes(PropertiesUtil.extractSubset(rootProperties, Appender.ELEMENT_TYPE));
for (final Map.Entry<String, Properties> entry : appenders.entrySet()) {
builder.add(createAppender(entry.getKey().trim(), entry.getValue()));
}
}
final String loggerProp = rootProperties.getProperty("loggers");
if (loggerProp != null) {
final String[] loggerNames = loggerProp.split(",");
for (final String loggerName : loggerNames) {
final String name = loggerName.trim();
if (!name.equals(LoggerConfig.ROOT)) {
builder.add(createLogger(name, PropertiesUtil.extractSubset(rootProperties, "logger." +
name)));
}
}
} else {
final Map<String, Properties> loggers = PropertiesUtil
.partitionOnCommonPrefixes(PropertiesUtil.extractSubset(rootProperties, "logger"), true);
for (final Map.Entry<String, Properties> entry : loggers.entrySet()) {
final String name = entry.getKey().trim();
if (!name.equals(LoggerConfig.ROOT)) {
builder.add(createLogger(name, entry.getValue()));
}
}
}
final String rootProp = rootProperties.getProperty("rootLogger");
final Properties props = PropertiesUtil.extractSubset(rootProperties, "rootLogger");
if (rootProp != null) {
props.setProperty("", rootProp);
rootProperties.remove("rootLogger");
}
if (props.size() > 0) {
builder.add(createRootLogger(props));
}
builder.setLoggerContext(loggerContext);
return builder.build(false);
}