Author: chetanm
Date: Fri Nov 29 16:32:56 2013
New Revision: 1546601
URL: http://svn.apache.org/r1546601
Log:
SLING-3257 - Make logback packaging data in stacktraces configurable
Added property `org.apache.sling.commons.log.packagingDataEnabled` to configure
the
packaging data support. By default it would be enabled
Modified:
sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/LogConfigManager.java
sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/LogbackManager.java
sling/trunk/bundles/commons/log/src/main/resources/OSGI-INF/metatype/metatype.properties
sling/trunk/bundles/commons/log/src/main/resources/OSGI-INF/metatype/metatype.xml
sling/trunk/bundles/commons/log/src/test/java/org/apache/sling/commons/log/logback/integration/ITConfigAdminSupport.java
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=1546601&r1=1546600&r2=1546601&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 Nov 29 16:32:56 2013
@@ -67,6 +67,8 @@ public class LogConfigManager implements
public static final String LOG_ADDITIV =
"org.apache.sling.commons.log.additiv";
+ public static final String LOG_PACKAGING_DATA =
"org.apache.sling.commons.log.packagingDataEnabled";
+
public static final String LOG_LEVEL_DEFAULT = "INFO";
public static final int LOG_FILE_NUMBER_DEFAULT = 5;
@@ -117,6 +119,8 @@ public class LogConfigManager implements
private File logbackConfigFile;
+ private boolean packagingDataEnabled;
+
/**
* Logs a message an optional stack trace to error output. This method is
* used by the logging system in case of errors writing to the correct
@@ -550,13 +554,18 @@ public class LogConfigManager implements
}
}
+ public boolean isPackagingDataEnabled() {
+ return packagingDataEnabled;
+ }
+
// ---------- ManagedService interface
-------------------------------------
private Dictionary<String, String> getBundleConfiguration(BundleContext
bundleContext) {
Dictionary<String, String> config = new Hashtable<String, String>();
final String[] props = {
- LOG_LEVEL, LOG_FILE, LOG_FILE_NUMBER, LOG_FILE_SIZE, LOG_PATTERN,
LOGBACK_FILE
+ LOG_LEVEL, LOG_FILE, LOG_FILE_NUMBER, LOG_FILE_SIZE, LOG_PATTERN,
LOGBACK_FILE,
+ LOG_PACKAGING_DATA
};
for (String prop : props) {
String value = bundleContext.getProperty(prop);
@@ -575,12 +584,14 @@ public class LogConfigManager implements
private void processGlobalConfig(Dictionary<String, String> configuration)
{
String fileName = configuration.get(LOGBACK_FILE);
- if (fileName != null) {
+ if (fileName != null && !fileName.isEmpty()) {
File file = new File(getAbsoluteFilePath(fileName));
final String path = file.getAbsolutePath();
if (!file.exists()) {
- log.warn("Logback configuration file [{}]does not exist.",
path);
- } else if (!file.canRead()) {
+ log.warn("Logback configuration file [{}] does not exist.",
path);
+ } if (!file.isFile()) {
+ log.warn("Logback configuration file [{}] is not a file.",
path);
+ }else if (!file.canRead()) {
log.warn("Logback configuration [{}]file cannot be read",
path);
} else {
synchronized (configLock) {
@@ -588,6 +599,15 @@ public class LogConfigManager implements
}
}
}
+
+ //Process packaging data
+ Object packagingData = configuration.get(LOG_PACKAGING_DATA);
+ if (packagingData != null) {
+ packagingDataEnabled = Boolean.valueOf(packagingData.toString());
+ } else {
+ //Defaults to true
+ packagingDataEnabled = true;
+ }
}
// ---------- Internal helpers
---------------------------------------------
Modified:
sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/LogbackManager.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/LogbackManager.java?rev=1546601&r1=1546600&r2=1546601&view=diff
==============================================================================
---
sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/LogbackManager.java
(original)
+++
sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/LogbackManager.java
Fri Nov 29 16:32:56 2013
@@ -307,6 +307,8 @@ public class LogbackManager extends Logg
addInfo("OsgiIntegrationListener : context reset detected. Adding
LogManager to context map and firing"
+ " listeners");
+
context.setPackagingDataEnabled(logConfigManager.isPackagingDataEnabled());
+
// Attach a console appender to handle logging untill we configure
// one. This would be removed in LogConfigManager.reset
final Logger rootLogger =
getLoggerContext().getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);
Modified:
sling/trunk/bundles/commons/log/src/main/resources/OSGI-INF/metatype/metatype.properties
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/commons/log/src/main/resources/OSGI-INF/metatype/metatype.properties?rev=1546601&r1=1546600&r2=1546601&view=diff
==============================================================================
---
sling/trunk/bundles/commons/log/src/main/resources/OSGI-INF/metatype/metatype.properties
(original)
+++
sling/trunk/bundles/commons/log/src/main/resources/OSGI-INF/metatype/metatype.properties
Fri Nov 29 16:32:56 2013
@@ -17,6 +17,8 @@
# under the License.
#
+# suppress inspection "UnusedProperty" for whole file
+
log.name = Apache Sling Logging Configuration
log.description = Global configuration setup for the Sling OSGi LogService \
implementation. See http://sling.apache.org/site/logging.html for more \
@@ -70,4 +72,9 @@ log.loggers.description = The logger nam
configuration. Each logger name applies for any child category unless
configured \
otherwise. E.g. a logger name of org.apache.sling applies to logger \
org.apache.sling.commons unless there is a different configuration for \
- org.apache.sling.commons.
+ org.apache.sling.commons.
+
+log.config.packagingData.name = Packaging Data
+log.config.packagingData.description = Include the packaging data which
provide \
+ details about jar name and version of jar from which the class is loaded as
part \
+ of stacktrace. See http://logback.qos.ch/reasonsToSwitch.html#packagingData
\ No newline at end of file
Modified:
sling/trunk/bundles/commons/log/src/main/resources/OSGI-INF/metatype/metatype.xml
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/commons/log/src/main/resources/OSGI-INF/metatype/metatype.xml?rev=1546601&r1=1546600&r2=1546601&view=diff
==============================================================================
---
sling/trunk/bundles/commons/log/src/main/resources/OSGI-INF/metatype/metatype.xml
(original)
+++
sling/trunk/bundles/commons/log/src/main/resources/OSGI-INF/metatype/metatype.xml
Fri Nov 29 16:32:56 2013
@@ -47,9 +47,14 @@
default="{0\,date\,dd.MM.yyyy HH:mm:ss.SSS} *{4}* [{2}] {3} {5}"
name="%log.pattern.name"
description="%log.pattern.description" />
- <metatype:AD id="org.apache.sling.commons.log.configurationFile"
- type="String" name="%log.config.file.name"
+ <metatype:AD id="org.apache.sling.commons.log.configurationFile"
+ type="String"
+ name="%log.config.file.name"
description="%log.config.file.description" />
+ <metatype:AD id="org.apache.sling.commons.log.packagingDataEnabled"
+ type="Boolean"
+ name="%log.config.packagingData.name"
+ description="%log.config.packagingData.description" />
</metatype:OCD>
<metatype:Designate pid="org.apache.sling.commons.log.LogManager">
<metatype:Object
Modified:
sling/trunk/bundles/commons/log/src/test/java/org/apache/sling/commons/log/logback/integration/ITConfigAdminSupport.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/commons/log/src/test/java/org/apache/sling/commons/log/logback/integration/ITConfigAdminSupport.java?rev=1546601&r1=1546600&r2=1546601&view=diff
==============================================================================
---
sling/trunk/bundles/commons/log/src/test/java/org/apache/sling/commons/log/logback/integration/ITConfigAdminSupport.java
(original)
+++
sling/trunk/bundles/commons/log/src/test/java/org/apache/sling/commons/log/logback/integration/ITConfigAdminSupport.java
Fri Nov 29 16:32:56 2013
@@ -25,6 +25,7 @@ import java.util.Iterator;
import javax.inject.Inject;
+import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.Appender;
import org.junit.Test;
@@ -77,6 +78,8 @@ public class ITConfigAdminSupport extend
public static final String FACTORY_PID_CONFIGS = PID + ".factory.config";
+ public static final String LOG_PACKAGING_DATA =
"org.apache.sling.commons.log.packagingDataEnabled";
+
@Inject
private ConfigurationAdmin ca;
@@ -138,6 +141,20 @@ public class ITConfigAdminSupport extend
}
@Test
+ public void testPackagingDataConfig() throws Exception {
+ // Set log level to debug for Root logger
+ Configuration config = ca.getConfiguration(PID, null);
+ Dictionary<String, Object> p = new Hashtable<String, Object>();
+ p.put(LOG_PACKAGING_DATA, Boolean.FALSE);
+ p.put(LOG_LEVEL, "INFO");
+ config.update(p);
+
+ delay();
+
+
assertFalse(((LoggerContext)LoggerFactory.getILoggerFactory()).isPackagingDataEnabled());
+ }
+
+ @Test
public void testExternalConfig() throws Exception {
Configuration config = ca.getConfiguration(PID, null);
Dictionary<String, Object> p = new Hashtable<String, Object>();