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.");
}
}