Author: cziegeler
Date: Fri Sep 27 12:58:02 2013
New Revision: 1526886
URL: http://svn.apache.org/r1526886
Log:
SLING-2024 : Make additivity configurable for a logger
Modified:
sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/LogConfig.java
sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/LogConfigManager.java
sling/trunk/bundles/commons/log/src/test/java/org/apache/sling/commons/log/logback/internal/TestLogConfig.java
Modified:
sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/LogConfig.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/LogConfig.java?rev=1526886&r1=1526885&r2=1526886&view=diff
==============================================================================
---
sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/LogConfig.java
(original)
+++
sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/LogConfig.java
Fri Sep 27 12:58:02 2013
@@ -46,8 +46,10 @@ public class LogConfig {
private final LoggerContext loggerContext;
+ private final boolean isAdditiv;
+
LogConfig(LogWriterProvider logWriterProvider, final String pattern,
Set<String> categories, Level logLevel,
- String logWriterName, String configPid, LoggerContext
loggerContext) {
+ String logWriterName, final boolean isAdditiv, String configPid,
LoggerContext loggerContext) {
this.logWriterProvider = logWriterProvider;
this.configPid = configPid;
this.pattern = pattern;
@@ -55,6 +57,7 @@ public class LogConfig {
this.logLevel = logLevel;
this.logWriterName = logWriterName;
this.loggerContext = loggerContext;
+ this.isAdditiv = isAdditiv;
}
public String getConfigPid() {
@@ -77,6 +80,10 @@ public class LogConfig {
return logWriterName != null;
}
+ public boolean isAdditive() {
+ return this.isAdditiv;
+ }
+
public LogWriter getLogWriter() {
return logWriterProvider.getLogWriter(getLogWriterName());
}
Modified:
sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/LogConfigManager.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/LogConfigManager.java?rev=1526886&r1=1526885&r2=1526886&view=diff
==============================================================================
---
sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/LogConfigManager.java
(original)
+++
sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/LogConfigManager.java
Fri Sep 27 12:58:02 2013
@@ -29,6 +29,14 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+import org.apache.sling.commons.log.logback.internal.config.ConfigAdminSupport;
+import
org.apache.sling.commons.log.logback.internal.config.ConfigurationException;
+import
org.apache.sling.commons.log.logback.internal.util.LoggerSpecificEncoder;
+import org.apache.sling.commons.log.logback.internal.util.Util;
+import org.osgi.framework.BundleContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
@@ -40,14 +48,6 @@ import ch.qos.logback.core.OutputStreamA
import ch.qos.logback.core.joran.action.ActionConst;
import ch.qos.logback.core.util.ContextUtil;
-import org.apache.sling.commons.log.logback.internal.config.ConfigAdminSupport;
-import
org.apache.sling.commons.log.logback.internal.config.ConfigurationException;
-import
org.apache.sling.commons.log.logback.internal.util.LoggerSpecificEncoder;
-import org.apache.sling.commons.log.logback.internal.util.Util;
-import org.osgi.framework.BundleContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
public class LogConfigManager implements LogbackResetListener,
LogConfig.LogWriterProvider {
public static final String LOG_LEVEL =
"org.apache.sling.commons.log.level";
@@ -66,6 +66,8 @@ public class LogConfigManager implements
public static final String LOG_LOGGERS =
"org.apache.sling.commons.log.names";
+ public static final String LOG_ADDITIV =
"org.apache.sling.commons.log.additiv";
+
public static final String LOG_LEVEL_DEFAULT = "INFO";
public static final int LOG_FILE_NUMBER_DEFAULT = 5;
@@ -189,6 +191,7 @@ public class LogConfigManager implements
// ---------- SlingLogPanel support
+ @Override
public LogWriter getLogWriter(String logWriterName) {
LogWriter lw = writerByFileName.get(logWriterName);
if (lw == null) {
@@ -274,9 +277,7 @@ public class LogConfigManager implements
ch.qos.logback.classic.Logger logger =
loggerContext.getLogger(category);
logger.setLevel(config.getLogLevel());
if (appender != null) {
- //If an appender is explicitly defined then set additive
to false
- //to be compatible with earlier Sling Logging behaviour
- logger.setAdditive(false);
+ logger.setAdditive(config.isAdditive());
logger.addAppender(appender);
}
}
@@ -342,7 +343,7 @@ public class LogConfigManager implements
* {@link LogConfigManager#LOG_FILE_NUMBER_DEFAULT} is assumed.
* If the writer writes standard output this property is ignored.</dd>
* </dl>
- *
+ *
* @param pid The identifier of the log writer to update or remove
* @param configuration New configuration setting for the log writer or
* <code>null</code> to indicate to remove the log writer.
@@ -457,21 +458,29 @@ public class LogConfigManager implements
* configured for any log writer or it may be the configuration PID of such
* a writer. If this property is missing or empty or does not refer to an
* existing log writer configuration, the default log writer is used.</dd>
- *
+ *
* @param pid The name of the configuration to update or remove.
* @param configuration The configuration object.
* @throws ConfigurationException If the log level and logger names
* properties are not configured for the given configuration.
*/
- public void updateLoggerConfiguration(String pid, Dictionary<?, ?>
configuration, boolean performRefresh)
- throws ConfigurationException {
+ public void updateLoggerConfiguration(final String pid, final
Dictionary<?, ?> configuration, final boolean performRefresh)
+ throws ConfigurationException {
if (configuration != null) {
String pattern = (String)
configuration.get(LogConfigManager.LOG_PATTERN);
- String level = (String)
configuration.get(LogConfigManager.LOG_LEVEL);
+ final String level = (String)
configuration.get(LogConfigManager.LOG_LEVEL);
String fileName = (String)
configuration.get(LogConfigManager.LOG_FILE);
- Set<String> categories =
toCategoryList(configuration.get(LogConfigManager.LOG_LOGGERS));
+ final Set<String> categories =
toCategoryList(configuration.get(LogConfigManager.LOG_LOGGERS));
+ final boolean additiv;
+ if ( configuration.get(LogConfigManager.LOG_ADDITIV) != null ) {
+ additiv =
Boolean.valueOf(configuration.get(LogConfigManager.LOG_ADDITIV).toString());
+ } else {
+ // If an appender is explicitly defined then set additive to
false
+ // to be compatible with earlier Sling Logging behavior
+ additiv = false;
+ }
// verify categories
if (categories == null) {
@@ -480,8 +489,8 @@ public class LogConfigManager implements
}
// verify no other configuration has any of the categories
- for (String cat : categories) {
- LogConfig cfg = configByCategory.get(cat);
+ for (final String cat : categories) {
+ final LogConfig cfg = configByCategory.get(cat);
if (cfg != null && !pid.equals(cfg.getConfigPid())) {
throw new
ConfigurationException(LogConfigManager.LOG_LOGGERS, "Category " + cat
+ " already defined by configuration " + pid);
@@ -493,7 +502,7 @@ public class LogConfigManager implements
throw new ConfigurationException(LogConfigManager.LOG_LEVEL,
"Value required");
}
// TODO: support numeric levels !
- Level logLevel = Level.toLevel(level);
+ final Level logLevel = Level.toLevel(level);
if (logLevel == null) {
throw new ConfigurationException(LogConfigManager.LOG_LEVEL,
"Unsupported value: " + level);
}
@@ -510,7 +519,7 @@ public class LogConfigManager implements
}
// create or modify existing configuration object
- LogConfig newConfig = new LogConfig(this, pattern, categories,
logLevel, fileName, pid, loggerContext);
+ final LogConfig newConfig = new LogConfig(this, pattern,
categories, logLevel, fileName, additiv, pid, loggerContext);
LogConfig oldConfig = configByPid.get(pid);
if (oldConfig != null) {
configByCategory.keySet().removeAll(oldConfig.getCategories());
@@ -614,7 +623,7 @@ public class LogConfigManager implements
* unmodified. Otherwise it is made absolute by resolving it relative to
the
* root directory set on this instance by the {@link #setRoot(String)}
* method.
- *
+ *
* @throws NullPointerException if <code>logFileName</code> is
* <code>null</code>.
*/
@@ -654,7 +663,7 @@ public class LogConfigManager implements
* array of strings or a collection of strings. Each string may in turn be
a
* comma-separated list of strings. Each entry makes up an entry in the
* resulting set.
- *
+ *
* @param loggers The configuration object to be decomposed. If this is
* <code>null</code>, <code>null</code> is returned immediately
* @return The set of logger names provided by the <code>loggers</code>
Modified:
sling/trunk/bundles/commons/log/src/test/java/org/apache/sling/commons/log/logback/internal/TestLogConfig.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/commons/log/src/test/java/org/apache/sling/commons/log/logback/internal/TestLogConfig.java?rev=1526886&r1=1526885&r2=1526886&view=diff
==============================================================================
---
sling/trunk/bundles/commons/log/src/test/java/org/apache/sling/commons/log/logback/internal/TestLogConfig.java
(original)
+++
sling/trunk/bundles/commons/log/src/test/java/org/apache/sling/commons/log/logback/internal/TestLogConfig.java
Fri Sep 27 12:58:02 2013
@@ -19,14 +19,15 @@
package org.apache.sling.commons.log.logback.internal;
+import static org.junit.Assert.assertEquals;
+
import java.util.Collections;
-import ch.qos.logback.classic.Level;
-import ch.qos.logback.classic.LoggerContext;
import org.junit.Test;
import org.slf4j.LoggerFactory;
-import static org.junit.Assert.assertEquals;
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.LoggerContext;
public class TestLogConfig {
@@ -48,7 +49,7 @@ public class TestLogConfig {
private LogConfig createConfig(String pattern) {
return new LogConfig(new DummyLogWriterProvider(), pattern,
Collections.<String> emptySet(), Level.DEBUG,
- "test", null, (LoggerContext) LoggerFactory.getILoggerFactory());
+ "test", false, null, (LoggerContext)
LoggerFactory.getILoggerFactory());
}
private static class DummyLogWriterProvider implements
LogConfig.LogWriterProvider {