You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by mi...@apache.org on 2016/06/03 09:41:33 UTC
[39/50] logging-log4j2 git commit: LOG4J2-1402 - Fix regression in
properties configuration to support arbitrary component ids
LOG4J2-1402 - Fix regression in properties configuration to support arbitrary component ids
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/7792679c
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/7792679c
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/7792679c
Branch: refs/heads/LOG4J-1181
Commit: 7792679c3b1add777b489a0d698c11cd4f96ea8e
Parents: 140e4c7
Author: Ralph Goers <rg...@nextiva.com>
Authored: Wed Jun 1 14:36:57 2016 -0700
Committer: Ralph Goers <rg...@nextiva.com>
Committed: Wed Jun 1 14:36:57 2016 -0700
----------------------------------------------------------------------
.../PropertiesConfigurationBuilder.java | 60 +++++++++++++++-----
.../src/test/resources/log4j-rolling.properties | 24 ++++----
src/changes/changes.xml | 3 +
src/site/xdoc/manual/configuration.xml.vm | 10 ++--
4 files changed, 67 insertions(+), 30 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/7792679c/log4j-core/src/main/java/org/apache/logging/log4j/core/config/properties/PropertiesConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/properties/PropertiesConfigurationBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/properties/PropertiesConfigurationBuilder.java
index 51bdcca..2c70234 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/properties/PropertiesConfigurationBuilder.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/properties/PropertiesConfigurationBuilder.java
@@ -120,24 +120,56 @@ public class PropertiesConfigurationBuilder extends ConfigurationBuilderFactory
}
}
- 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()));
+ String filterProp = rootProperties.getProperty("filters");
+ if (filterProp != null) {
+ String[] filterNames = filterProp.split(",");
+ for (String filterName : filterNames) {
+ 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 Map<String, Properties> appenders = PropertiesUtil.partitionOnCommonPrefixes(
- PropertiesUtil.extractSubset(rootProperties, "appender"));
- for (final Map.Entry<String, Properties> entry : appenders.entrySet()) {
- builder.add(createAppender(entry.getKey().trim(), entry.getValue()));
+ String appenderProp = rootProperties.getProperty("appenders");
+ if (appenderProp != null) {
+ String[] appenderNames = appenderProp.split(",");
+ for (String appenderName : appenderNames) {
+ 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"));
+ for (final Map.Entry<String, Properties> entry : appenders.entrySet()) {
+ builder.add(createAppender(entry.getKey().trim(), entry.getValue()));
+ }
}
- final Map<String, Properties> loggers = PropertiesUtil.partitionOnCommonPrefixes(
- PropertiesUtil.extractSubset(rootProperties, "logger"));
- 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()));
+ String loggerProp = rootProperties.getProperty("loggers");
+ if (loggerProp != null) {
+ String[] loggerNames = loggerProp.split(",");
+ for (String loggerName : loggerNames) {
+ 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"));
+ 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()));
+ }
}
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/7792679c/log4j-core/src/test/resources/log4j-rolling.properties
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/resources/log4j-rolling.properties b/log4j-core/src/test/resources/log4j-rolling.properties
index 17e4a60..d02e0a8 100644
--- a/log4j-core/src/test/resources/log4j-rolling.properties
+++ b/log4j-core/src/test/resources/log4j-rolling.properties
@@ -23,7 +23,7 @@ filters = threshold
filter.threshold.type = ThresholdFilter
filter.threshold.level = debug
-appenders = console, rolling, list
+appenders = console, rolling, my.list
appender.console.type = Console
appender.console.name = STDOUT
@@ -43,19 +43,19 @@ appender.rolling.policies.time.modulate = true
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=100MB
-appender.list.type = List
-appender.list.name = List
-appender.list.filters = threshold
-appender.list.filter.threshold.type = ThresholdFilter
-appender.list.filter.threshold.level = error
+appender.my.list.type = List
+appender.my.list.name = List
+appender.my.list.filters = threshold
+appender.my.list.filter.threshold.type = ThresholdFilter
+appender.my.list.filter.threshold.level = error
-loggers = rolling
+loggers = rolling.file
-logger.rolling.name = org.apache.logging.log4j.core.appender.rolling
-logger.rolling.level = debug
-logger.rolling.additivity = false
-logger.rolling.appenderRefs = rolling
-logger.rolling.appenderRef.rolling.ref = RollingFile
+logger.rolling.file.name = org.apache.logging.log4j.core.appender.rolling
+logger.rolling.file.level = debug
+logger.rolling.file.additivity = false
+logger.rolling.file.appenderRefs = rolling
+logger.rolling.file.appenderRef.rolling.ref = RollingFile
rootLogger.level = info
rootLogger.appenderRefs = stdout
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/7792679c/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 1724b0d..f952402 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -24,6 +24,9 @@
</properties>
<body>
<release version="2.6.1" date="2016-MM-DD" description="GA Release 2.6.1">
+ <action issue="LOG4J2-1402" dev="rgoers" type="fix">
+ Fix regression in properties configuration to support arbitrary component ids.
+ </action>
<action issue="LOG4J2-1385" dev="ggregory" type="update">
(GC) CSV layouts should not create a new CSVPrinter for each log event.
</action>
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/7792679c/src/site/xdoc/manual/configuration.xml.vm
----------------------------------------------------------------------
diff --git a/src/site/xdoc/manual/configuration.xml.vm b/src/site/xdoc/manual/configuration.xml.vm
index 47a0ce8..ca0bceb 100644
--- a/src/site/xdoc/manual/configuration.xml.vm
+++ b/src/site/xdoc/manual/configuration.xml.vm
@@ -821,14 +821,16 @@ public class Bar {
Prior to version 2.6,
the properties configuration requires that you list the identifiers of the appenders, filters and loggers,
in a comma separated list in properties with those names. Each of those components will then be expected
- to be defined in sets of properties that begin with <i>component.identifier</i>. The identifier does not
+ to be defined in sets of properties that begin with <i>component.<.identifier>.</i>. The identifier does not
have to match the name of the component being defined but must uniquely identify all the attributes and
- subcomponents that are part of the component. Each individual component MUST have a "type" attribute
+ subcomponents that are part of the component. If the list of identifiers is not present the
+ identier must not contain a '.'. Each individual component MUST have a "type" attribute
specified that identifies the component's Plugin type.
</p>
<p>
- As of version 2.6, this list of identifiers is no longer required as names are inferred upon first usage.
- The list of identifiers used in a 2.4/2.5 format will be safely ignored in 2.6+.
+ As of version 2.6, this list of identifiers is no longer required as names are inferred upon first usage,
+ however if you wish to use more complex identifies you must still use the list. If the list is present
+ it will be used.
</p>
<p>
Unlike the base components, when creating subcomponents you cannot specify an element containing a list of