Author: ivol37 at gmail.com
Date: Wed Oct 27 10:25:24 2010
New Revision: 211

Log:
[AMDATU-74] Improved ConsoleLog handler to detach any other handlers attached 
to Java util loggers prior to attach itself. Also updated Cassandra SL4J to use 
the JDK bridge instead of log4j bridge such that log messages are send to JDK 
and picked up by the JDK->OSGi log handler.

Added:
   
trunk/platform-bundles/cassandra-application/src/main/resources/lib/slf4j-api-1.6.1.jar
   (contents, props changed)
   
trunk/platform-bundles/cassandra-application/src/main/resources/lib/slf4j-jdk14-1.6.1.jar
   (contents, props changed)
Removed:
   
trunk/platform-bundles/cassandra-application/src/main/resources/lib/slf4j-api-1.5.8.jar
   
trunk/platform-bundles/cassandra-application/src/main/resources/lib/slf4j-log4j12-1.5.8.jar
Modified:
   trunk/platform-bundles/cassandra-application/pom.xml
   
trunk/platform-bundles/loghandler/src/main/java/org/amdatu/platform/loghandler/osgi/Activator.java
   
trunk/platform-bundles/loghandler/src/main/java/org/amdatu/platform/loghandler/service/JdkLogForwarder.java
   
trunk/platform-bundles/wink-application/src/main/java/org/amdatu/platform/wink/osgi/Activator.java

Modified: trunk/platform-bundles/cassandra-application/pom.xml
==============================================================================
--- trunk/platform-bundles/cassandra-application/pom.xml        (original)
+++ trunk/platform-bundles/cassandra-application/pom.xml        Wed Oct 27 
10:25:24 2010
@@ -89,8 +89,8 @@
               lib/jug-2.0.0.jar,
               lib/libthrift-r959516.jar,
               lib/log4j-1.2.16.jar,
-              lib/slf4j-api-1.5.8.jar,
-              lib/slf4j-log4j12-1.5.8.jar,
+              lib/slf4j-api-1.6.1.jar,
+              lib/slf4j-jdk14-1.6.1.jar,
               lib/snakeyaml-1.6.jar
             </Bundle-ClassPath> 
             <Import-Package>

Added: 
trunk/platform-bundles/cassandra-application/src/main/resources/lib/slf4j-api-1.6.1.jar
==============================================================================
Binary file. No diff available.

Added: 
trunk/platform-bundles/cassandra-application/src/main/resources/lib/slf4j-jdk14-1.6.1.jar
==============================================================================
Binary file. No diff available.

Modified: 
trunk/platform-bundles/loghandler/src/main/java/org/amdatu/platform/loghandler/osgi/Activator.java
==============================================================================
--- 
trunk/platform-bundles/loghandler/src/main/java/org/amdatu/platform/loghandler/osgi/Activator.java
  (original)
+++ 
trunk/platform-bundles/loghandler/src/main/java/org/amdatu/platform/loghandler/osgi/Activator.java
  Wed Oct 27 10:25:24 2010
@@ -53,10 +53,9 @@
 
         // Register the JDKLog bridge
         manager.add(createComponent()
-                .setImplementation(new 
JdkLogForwarder("org.ops4j.pax.web.service.jetty.internal"))
-                .add(createServiceDependency()
-                    .setService(LogService.class)
-                    .setRequired(true)));
+                .setImplementation(new JdkLogForwarder())
+                
.add(createServiceDependency().setService(LogService.class).setRequired(true))
+                
.add(createServiceDependency().setService("(objectclass=*)").setCallbacks("onAdded",
 "onRemoved")));
 
         // TODO Why do we filter? Don't we just want all stuff?
     }

Modified: 
trunk/platform-bundles/loghandler/src/main/java/org/amdatu/platform/loghandler/service/JdkLogForwarder.java
==============================================================================
--- 
trunk/platform-bundles/loghandler/src/main/java/org/amdatu/platform/loghandler/service/JdkLogForwarder.java
 (original)
+++ 
trunk/platform-bundles/loghandler/src/main/java/org/amdatu/platform/loghandler/service/JdkLogForwarder.java
 Wed Oct 27 10:25:24 2010
@@ -16,79 +16,115 @@
  */
 package org.amdatu.platform.loghandler.service;
 
+import java.util.ArrayList;
+import java.util.Enumeration;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.logging.Handler;
 import java.util.logging.Level;
+import java.util.logging.LogManager;
 import java.util.logging.LogRecord;
 import java.util.logging.Logger;
 
+import org.osgi.framework.ServiceReference;
 import org.osgi.service.log.LogService;
 
 /**
  * This class forwards JDK log messages to the OSGi log service.
+ * 
  * @author ivol
  */
 public class JdkLogForwarder extends Handler {
 
-    private static final Map<Level, Integer> LOG_LEVEL_MAPPING = new 
HashMap<Level, Integer>();
-    static {
-        LOG_LEVEL_MAPPING.put(Level.SEVERE, LogService.LOG_ERROR);
-        LOG_LEVEL_MAPPING.put(Level.WARNING, LogService.LOG_WARNING);
-        LOG_LEVEL_MAPPING.put(Level.INFO, LogService.LOG_INFO);
-        LOG_LEVEL_MAPPING.put(Level.CONFIG, LogService.LOG_INFO);
-    }
-
-    private volatile LogService m_log;
-    private final String[] m_loggerNames;
-
-    public JdkLogForwarder(String... loggerNames) {
-        m_loggerNames = loggerNames;
-    }
-
-    public void start() {
-        for (String loggerName : m_loggerNames) {
-            Logger logger = Logger.getLogger(loggerName);
-            logger.setUseParentHandlers(false);
-            logger.addHandler(this);
-        }
-    }
-
-    public void stop() {
-        for (String loggerName : m_loggerNames) {
-            Logger.getLogger(loggerName).removeHandler(this);
-        }
-    }
-
-
-    @Override
-    public void publish(LogRecord record) {
-        if (record.getLevel() == Level.OFF) {
-            return;
-        }
-
-        if (record.getThrown() != null) {
-            m_log.log(getToOsgiLogLevel(record.getLevel()), 
record.getMessage(), record.getThrown());
-        } else {
-            m_log.log(getToOsgiLogLevel(record.getLevel()), 
record.getMessage());
-        }
-    }
-
-    @Override
-    public void close() throws SecurityException {
-    }
-
-    @Override
-    public void flush() {
-    }
-
-    private int getToOsgiLogLevel(Level level) {
-        if (LOG_LEVEL_MAPPING.containsKey(level)) {
-            return LOG_LEVEL_MAPPING.get(level);
-        }
-        else {
-            return LogService.LOG_DEBUG;
-        }
-    }
+       private static final Map<Level, Integer> LOG_LEVEL_MAPPING = new 
HashMap<Level, Integer>();
+       static {
+               LOG_LEVEL_MAPPING.put(Level.SEVERE, LogService.LOG_ERROR);
+               LOG_LEVEL_MAPPING.put(Level.WARNING, LogService.LOG_WARNING);
+               LOG_LEVEL_MAPPING.put(Level.INFO, LogService.LOG_INFO);
+               LOG_LEVEL_MAPPING.put(Level.CONFIG, LogService.LOG_INFO);
+       }
+
+       private volatile LogService m_log;
+       private final List<String> m_loggerNames;
+
+       public JdkLogForwarder() {
+               m_loggerNames = new ArrayList<String>();
+       }
+
+       public void start() {
+               for (String loggerName : m_loggerNames) {
+                       Logger logger = Logger.getLogger(loggerName);
+                       logger.setUseParentHandlers(false);
+                       logger.addHandler(this);
+               }
+       }
+
+       public void stop() {
+               for (String loggerName : m_loggerNames) {
+                       Logger.getLogger(loggerName).removeHandler(this);
+               }
+       }
+
+       public void onAdded(ServiceReference ref, Object service) {
+               // We need to get all Java util logging loggers for this service
+               LogManager logManager = LogManager.getLogManager();
+               Enumeration<String> loggerNames = logManager.getLoggerNames();
+               while (loggerNames.hasMoreElements()) {
+                       String loggerName = loggerNames.nextElement();
+                       if (!m_loggerNames.contains(loggerName)) {
+                               m_loggerNames.add(loggerName);
+                               Logger logger = 
logManager.getLogger(loggerName);
+                               if (logger != null) {
+                                       logger.setUseParentHandlers(false);
+                                       
+                                       // Remove all current log handlers, it 
should be only me!
+                                       if (logger.getHandlers() != null) {
+                                               for (Handler logHandler : 
logger.getHandlers()) {
+                                                       
logger.removeHandler(logHandler);
+                                               }
+                                       }
+                                       
+                                       // Add me
+                                       logger.addHandler(this);
+                               }
+                       }
+               }
+       }
+
+       public void onRemoved(ServiceReference ref, Object service) {
+       }
+
+       @Override
+       public void publish(LogRecord record) {
+               if (record.getLevel() == Level.OFF) {
+                       return;
+               }
+
+               if (record.getThrown() != null) {
+                       m_log.log(getToOsgiLogLevel(record.getLevel()),
+                                       record.getMessage(), 
record.getThrown());
+               } else {
+                       m_log
+                                       
.log(getToOsgiLogLevel(record.getLevel()), record
+                                                       .getMessage());
+               }
+       }
+
+       @Override
+       public void close() throws SecurityException {
+       }
+
+       @Override
+       public void flush() {
+       }
+
+       private int getToOsgiLogLevel(Level level) {
+               if (LOG_LEVEL_MAPPING.containsKey(level)) {
+                       return LOG_LEVEL_MAPPING.get(level);
+               } else {
+                       return LogService.LOG_DEBUG;
+               }
+       }
 
 }

Modified: 
trunk/platform-bundles/wink-application/src/main/java/org/amdatu/platform/wink/osgi/Activator.java
==============================================================================
--- 
trunk/platform-bundles/wink-application/src/main/java/org/amdatu/platform/wink/osgi/Activator.java
  (original)
+++ 
trunk/platform-bundles/wink-application/src/main/java/org/amdatu/platform/wink/osgi/Activator.java
  Wed Oct 27 10:25:24 2010
@@ -36,8 +36,6 @@
     
     @Override
     public void init(BundleContext context, DependencyManager manager) throws 
Exception {
-        System.out.println("Starting Wink application bundle.");
-
         // Create and register the gadget oAuth store service
         manager.add(createComponent()
                 .setImplementation(WinkRegistrationServiceImpl.class)
@@ -49,6 +47,5 @@
 
     @Override
     public void destroy(BundleContext context, DependencyManager manager) 
throws Exception {
-        System.out.println("Stopping Wink application bundle.");
     }
 }

Reply via email to