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>();


Reply via email to