Bug 394979 - Use the OSGi LogService
diff --git a/org.eclipse.gemini.management/META-INF/MANIFEST.MF b/org.eclipse.gemini.management/META-INF/MANIFEST.MF
index 3d558fa..1a89800 100644
--- a/org.eclipse.gemini.management/META-INF/MANIFEST.MF
+++ b/org.eclipse.gemini.management/META-INF/MANIFEST.MF
@@ -18,6 +18,7 @@
  org.osgi.jmx.service.cm;version="1.3",
  org.osgi.jmx.service.useradmin;version="1.1.1",
  org.osgi.service.cm,
+ org.osgi.service.log,
  org.osgi.service.packageadmin,
  org.osgi.service.permissionadmin,
  org.osgi.service.provisioning,
diff --git a/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/Activator.java b/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/Activator.java
index 1d3a2e8..3427eee 100644
--- a/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/Activator.java
+++ b/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/Activator.java
@@ -19,8 +19,6 @@
 import java.util.List;

 import java.util.concurrent.CopyOnWriteArrayList;

 import java.util.concurrent.atomic.AtomicBoolean;

-import java.util.logging.Level;

-import java.util.logging.Logger;

 

 import javax.management.InstanceAlreadyExistsException;

 import javax.management.InstanceNotFoundException;

@@ -53,6 +51,7 @@
 import org.osgi.jmx.service.provisioning.ProvisioningServiceMBean;

 import org.osgi.jmx.service.useradmin.UserAdminMBean;

 import org.osgi.service.cm.ConfigurationAdmin;

+import org.osgi.service.log.LogService;

 import org.osgi.service.permissionadmin.PermissionAdmin;

 import org.osgi.service.provisioning.ProvisioningService;

 import org.osgi.service.useradmin.UserAdmin;

@@ -66,8 +65,6 @@
  */

 @SuppressWarnings("deprecation")

 public class Activator implements BundleActivator {

-

-	private static final Logger LOGGER = Logger.getLogger(Activator.class.getCanonicalName());

 	

 	private final List<MBeanServer> mbeanServers = new CopyOnWriteArrayList<MBeanServer>();

 	

@@ -114,6 +111,22 @@
 	private ServiceTracker<ProvisioningService, ?> provisioningServiceTracker;

 	

 	private ServiceTracker<UserAdmin, ?> userAdminTracker;

+	

+	private ServiceTracker<LogService, ?> logServiceTracker;

+	

+	private LogService logger;

+	

+	private void log (int level, String message) {

+		if (logger != null) {

+			logger.log(level, message);

+		}

+	}

+	

+	private void log (int level, String message, Throwable t) {

+		if (logger != null) {

+			logger.log(level, message, t);

+		}

+	}

 

 	private void createObjectNames() {

 		try {

@@ -135,12 +148,14 @@
 	 * {@inheritDoc}

 	 */

 	public void start(BundleContext bundleContext) throws Exception {

-        objectNameTranslator = DefaultObjectNameTranslator.initialiseObjectNameTranslator(bundleContext);

+		logServiceTracker = new ServiceTracker<LogService, Object>(bundleContext, LogService.class, new LogServiceTracker());

+		logServiceTracker.open();

+        objectNameTranslator = DefaultObjectNameTranslator.initialiseObjectNameTranslator(bundleContext, logger);

         createObjectNames();

 		this.bundleContext = bundleContext;

 		registerDefaultMBeanServer();

 		this.mbeanServiceTracker = new ServiceTracker<MBeanServer, Object>(this.bundleContext, MBeanServer.class, new MBeanServiceTracker());

-		LOGGER.fine("Awaiting initial MBeanServer service registration");

+		log(LogService.LOG_INFO, "Awaiting initial MBeanServer service registration");

 		this.mbeanServiceTracker.open();

 	}

 	

@@ -180,97 +195,97 @@
 		if (!servicesRegistered.get()) {

 			return;

 		}

-		LOGGER.fine("Deregistering framework with MBeanServer: " + mbeanServer);

+		log(LogService.LOG_INFO, "Deregistering framework with MBeanServer: " + mbeanServer);

 		try {

 			mbeanServer.unregisterMBean(frameworkName);

 		} catch (InstanceNotFoundException e) {

-			LOGGER.log(Level.FINE, "FrameworkMBean not found on deregistration", e);

+			log(LogService.LOG_INFO, "FrameworkMBean not found on deregistration", e);

 		} catch (MBeanRegistrationException e) {

-			LOGGER.log(Level.FINE, "FrameworkMBean deregistration problem", e);

+			log(LogService.LOG_INFO, "FrameworkMBean deregistration problem", e);

 		}

 		framework = null;

 

-		LOGGER.fine("Deregistering bundle state with MBeanServer: " + mbeanServer);

+		log(LogService.LOG_INFO, "Deregistering bundle state with MBeanServer: " + mbeanServer);

 		try {

 			mbeanServer.unregisterMBean(bundleStateName);

 		} catch (InstanceNotFoundException e) {

-			LOGGER.log(Level.FINEST, "OSGi BundleStateMBean not found on deregistration", e);

+			log(LogService.LOG_INFO, "OSGi BundleStateMBean not found on deregistration", e);

 		} catch (MBeanRegistrationException e) {

-			LOGGER.log(Level.FINE, "OSGi BundleStateMBean deregistration problem", e);

+			log(LogService.LOG_INFO, "OSGi BundleStateMBean deregistration problem", e);

 		}

 		bundleState = null;

 

-		LOGGER.fine("Deregistering bundle wiring state with MBeanServer: " + mbeanServer);

+		log(LogService.LOG_INFO, "Deregistering bundle wiring state with MBeanServer: " + mbeanServer);

 		try {

 			mbeanServer.unregisterMBean(bundleWiringStateName);

 		} catch (InstanceNotFoundException e) {

-			LOGGER.log(Level.FINEST, "OSGi BundleWiringStateMBean not found on deregistration", e);

+			log(LogService.LOG_DEBUG, "OSGi BundleWiringStateMBean not found on deregistration", e);

 		} catch (MBeanRegistrationException e) {

-			LOGGER.log(Level.FINE, "OSGi BundleWiringStateMBean deregistration problem", e);

+			log(LogService.LOG_INFO, "OSGi BundleWiringStateMBean deregistration problem", e);

 		}

 		bundleWiringState = null;

 		

-		LOGGER.fine("Deregistering services monitor with MBeanServer: " + mbeanServer);

+		log(LogService.LOG_INFO, "Deregistering services monitor with MBeanServer: " + mbeanServer);

 		try {

 			mbeanServer.unregisterMBean(serviceStateName);

 		} catch (InstanceNotFoundException e) {

-			LOGGER.log(Level.FINEST, "OSGi ServiceStateMBean not found on deregistration", e);

+			log(LogService.LOG_DEBUG, "OSGi ServiceStateMBean not found on deregistration", e);

 		} catch (MBeanRegistrationException e) {

-			LOGGER.log(Level.FINE, "OSGi ServiceStateMBean deregistration problem", e);

+			log(LogService.LOG_INFO, "OSGi ServiceStateMBean deregistration problem", e);

 		}

 		serviceState = null;

 

-		LOGGER.fine("Deregistering packages monitor with MBeanServer: " + mbeanServer);

+		log(LogService.LOG_INFO, "Deregistering packages monitor with MBeanServer: " + mbeanServer);

 		try {

 			mbeanServer.unregisterMBean(packageStateName);

 		} catch (InstanceNotFoundException e) {

-			LOGGER.log(Level.FINEST, "OSGi PackageStateMBean not found on deregistration", e);

+			log(LogService.LOG_DEBUG, "OSGi PackageStateMBean not found on deregistration", e);

 		} catch (MBeanRegistrationException e) {

-			LOGGER.log(Level.FINE, "OSGi PackageStateMBean deregistration problem", e);

+			log(LogService.LOG_INFO, "OSGi PackageStateMBean deregistration problem", e);

 		}

 		packageState = null;

 

-		LOGGER.fine("Deregistering config admin with MBeanServer: " + mbeanServer);

+		log(LogService.LOG_INFO, "Deregistering config admin with MBeanServer: " + mbeanServer);

 		configAdminTracker.close();

 		try {

 			mbeanServer.unregisterMBean(configAdminName);

 		} catch (InstanceNotFoundException e) {

-			LOGGER.log(Level.FINEST, "OSGi ConfigAdminMBean not found on deregistration", e);

+			log(LogService.LOG_DEBUG, "OSGi ConfigAdminMBean not found on deregistration", e);

 		} catch (MBeanRegistrationException e) {

-			LOGGER.log(Level.FINE, "OSGi ConfigAdminMBean deregistration problem", e);

+			log(LogService.LOG_INFO, "OSGi ConfigAdminMBean deregistration problem", e);

 		}

 		configAdminTracker = null;

 

-		LOGGER.fine("Deregistering permission admin with MBeanServer: " + mbeanServer);

+		log(LogService.LOG_INFO, "Deregistering permission admin with MBeanServer: " + mbeanServer);

 		permissionAdminTracker.close();

 		try {

 			mbeanServer.unregisterMBean(permissionAdminName);

 		} catch (InstanceNotFoundException e) {

-			LOGGER.log(Level.FINEST, "OSGi PermissionAdminMBean not found on deregistration", e);

+			log(LogService.LOG_DEBUG, "OSGi PermissionAdminMBean not found on deregistration", e);

 		} catch (MBeanRegistrationException e) {

-			LOGGER.log(Level.FINE, "OSGi PermissionAdminMBean deregistration problem", e);

+			log(LogService.LOG_INFO, "OSGi PermissionAdminMBean deregistration problem", e);

 		}

 		permissionAdminTracker = null;

 

-		LOGGER.fine("Deregistering provisioning service admin with MBeanServer: " + mbeanServer);

+		log(LogService.LOG_INFO, "Deregistering provisioning service admin with MBeanServer: " + mbeanServer);

 		provisioningServiceTracker.close();

 		try {

 			mbeanServer.unregisterMBean(provisioningServiceName);

 		} catch (InstanceNotFoundException e) {

-			LOGGER.log(Level.FINEST, "OSGi ProvisioningServiceMBean not found on deregistration", e);

+			log(LogService.LOG_DEBUG, "OSGi ProvisioningServiceMBean not found on deregistration", e);

 		} catch (MBeanRegistrationException e) {

-			LOGGER.log(Level.FINE, "OSGi ProvisioningServiceMBean deregistration problem", e);

+			log(LogService.LOG_INFO, "OSGi ProvisioningServiceMBean deregistration problem", e);

 		}

 		provisioningServiceTracker = null;

 

-		LOGGER.fine("Deregistering user admin with MBeanServer: " + mbeanServer);

+		log(LogService.LOG_INFO, "Deregistering user admin with MBeanServer: " + mbeanServer);

 		userAdminTracker.close();

 		try {

 			mbeanServer.unregisterMBean(userAdminName);

 		} catch (InstanceNotFoundException e) {

-			LOGGER.log(Level.FINEST, "OSGi UserAdminMBean not found on deregistration", e);

+			log(LogService.LOG_DEBUG, "OSGi UserAdminMBean not found on deregistration", e);

 		} catch (MBeanRegistrationException e) {

-			LOGGER.log(Level.FINE, "OSGi UserAdminMBean deregistration problem", e);

+			log(LogService.LOG_INFO, "OSGi UserAdminMBean deregistration problem", e);

 		}

 		userAdminTracker = null;

 		servicesRegistered.set(false);

@@ -285,87 +300,87 @@
 		try {

 			framework = new StandardMBean(new Framework(bundleContext), FrameworkMBean.class);

 		} catch (NotCompliantMBeanException e) {

-			LOGGER.log(Level.SEVERE, "Unable to create StandardMBean for Framework", e);

+			log(LogService.LOG_ERROR, "Unable to create StandardMBean for Framework", e);

 			return;

 		}

 		try {

 			bundleState = new StandardMBean(new BundleState(bundleContext), BundleStateMBean.class);

 		} catch (NotCompliantMBeanException e) {

-			LOGGER.log(Level.SEVERE, "Unable to create StandardMBean for BundleState", e);

+			log(LogService.LOG_ERROR, "Unable to create StandardMBean for BundleState", e);

 			return;

 		}

 		try {

 			bundleWiringState = new StandardMBean(new BundleWiringState(bundleContext), BundleWiringStateMBean.class);

 		} catch (NotCompliantMBeanException e) {

-			LOGGER.log(Level.SEVERE, "Unable to create StandardMBean for BundleWiringState", e);

+			log(LogService.LOG_ERROR, "Unable to create StandardMBean for BundleWiringState", e);

 			return;

 		}

 		try {

 			serviceState = new StandardMBean(new ServiceState(bundleContext), CustomServiceStateMBean.class);

 		} catch (NotCompliantMBeanException e) {

-			LOGGER.log(Level.SEVERE, "Unable to create StandardMBean for ServiceState", e);

+			log(LogService.LOG_ERROR, "Unable to create StandardMBean for ServiceState", e);

 			return;

 		}

 		try {

 			packageState = new StandardMBean(new PackageState(bundleContext), PackageStateMBean.class);

 		} catch (NotCompliantMBeanException e) {

-			LOGGER.log(Level.SEVERE, "Unable to create StandardMBean for PackageState", e);

+			log(LogService.LOG_ERROR, "Unable to create StandardMBean for PackageState", e);

 			return;

 		}

 

-		LOGGER.fine("Registering Framework with MBeanServer: " + mbeanServer + " with name: " + frameworkName);

+		log(LogService.LOG_INFO, "Registering Framework with MBeanServer: " + mbeanServer + " with name: " + frameworkName);

 		try {

 			mbeanServer.registerMBean(framework, frameworkName);

 		} catch (InstanceAlreadyExistsException e) {

-			LOGGER.log(Level.FINE, "Cannot register OSGi framework MBean", e);

+			log(LogService.LOG_INFO, "Cannot register OSGi framework MBean", e);

 		} catch (MBeanRegistrationException e) {

-			LOGGER.log(Level.SEVERE, "Cannot register OSGi framework MBean", e);

+			log(LogService.LOG_ERROR, "Cannot register OSGi framework MBean", e);

 		} catch (NotCompliantMBeanException e) {

-			LOGGER.log(Level.SEVERE, "Cannot register OSGi framework MBean", e);

+			log(LogService.LOG_ERROR, "Cannot register OSGi framework MBean", e);

 		}

 

-		LOGGER.fine("Registering bundle state with MBeanServer: " + mbeanServer + " with name: " + bundleStateName);

+		log(LogService.LOG_INFO, "Registering bundle state with MBeanServer: " + mbeanServer + " with name: " + bundleStateName);

 		try {

 			mbeanServer.registerMBean(bundleState, bundleStateName);

 		} catch (InstanceAlreadyExistsException e) {

-			LOGGER.log(Level.FINE, "Cannot register OSGi BundleStateMBean", e);

+			log(LogService.LOG_INFO, "Cannot register OSGi BundleStateMBean", e);

 		} catch (MBeanRegistrationException e) {

-			LOGGER.log(Level.SEVERE, "Cannot register OSGi BundleStateMBean", e);

+			log(LogService.LOG_ERROR, "Cannot register OSGi BundleStateMBean", e);

 		} catch (NotCompliantMBeanException e) {

-			LOGGER.log(Level.SEVERE, "Cannot register OSGi BundleStateMBean", e);

+			log(LogService.LOG_ERROR, "Cannot register OSGi BundleStateMBean", e);

 		}

 

-		LOGGER.fine("Registering bundle wiring state with MBeanServer: " + mbeanServer + " with name: " + bundleStateName);

+		log(LogService.LOG_INFO, "Registering bundle wiring state with MBeanServer: " + mbeanServer + " with name: " + bundleStateName);

 		try {

 			mbeanServer.registerMBean(bundleWiringState, bundleWiringStateName);

 		} catch (InstanceAlreadyExistsException e) {

-			LOGGER.log(Level.FINE, "Cannot register OSGi BundleWiringStateMBean", e);

+			log(LogService.LOG_INFO, "Cannot register OSGi BundleWiringStateMBean", e);

 		} catch (MBeanRegistrationException e) {

-			LOGGER.log(Level.SEVERE, "Cannot register OSGi BundleWiringStateMBean", e);

+			log(LogService.LOG_ERROR, "Cannot register OSGi BundleWiringStateMBean", e);

 		} catch (NotCompliantMBeanException e) {

-			LOGGER.log(Level.SEVERE, "Cannot register OSGi BundleWiringStateMBean", e);

+			log(LogService.LOG_ERROR, "Cannot register OSGi BundleWiringStateMBean", e);

 		}

 

-		LOGGER.fine("Registering services monitor with MBeanServer: " + mbeanServer + " with name: " + serviceStateName);

+		log(LogService.LOG_INFO, "Registering services monitor with MBeanServer: " + mbeanServer + " with name: " + serviceStateName);

 		try {

 			mbeanServer.registerMBean(serviceState, serviceStateName);

 		} catch (InstanceAlreadyExistsException e) {

-			LOGGER.log(Level.FINE, "Cannot register OSGi ServiceStateMBean", e);

+			log(LogService.LOG_INFO, "Cannot register OSGi ServiceStateMBean", e);

 		} catch (MBeanRegistrationException e) {

-			LOGGER.log(Level.SEVERE, "Cannot register OSGi ServiceStateMBean", e);

+			log(LogService.LOG_ERROR, "Cannot register OSGi ServiceStateMBean", e);

 		} catch (NotCompliantMBeanException e) {

-			LOGGER.log(Level.SEVERE, "Cannot register OSGi ServiceStateMBean", e);

+			log(LogService.LOG_ERROR, "Cannot register OSGi ServiceStateMBean", e);

 		}

 

-		LOGGER.fine("Registering packages monitor with MBeanServer: " + mbeanServer + " with name: " + packageStateName);

+		log(LogService.LOG_INFO, "Registering packages monitor with MBeanServer: " + mbeanServer + " with name: " + packageStateName);

 		try {

 			mbeanServer.registerMBean(packageState, packageStateName);

 		} catch (InstanceAlreadyExistsException e) {

-			LOGGER.log(Level.FINE, "Cannot register OSGi PackageStateMBean", e);

+			log(LogService.LOG_INFO, "Cannot register OSGi PackageStateMBean", e);

 		} catch (MBeanRegistrationException e) {

-			LOGGER.log(Level.SEVERE, "Cannot register OSGi PackageStateMBean", e);

+			log(LogService.LOG_ERROR, "Cannot register OSGi PackageStateMBean", e);

 		} catch (NotCompliantMBeanException e) {

-			LOGGER.log(Level.SEVERE, "Cannot register OSGi PackageStateMBean", e);

+			log(LogService.LOG_ERROR, "Cannot register OSGi PackageStateMBean", e);

 		}

 

         configAdminTracker = new ServiceTracker<ConfigurationAdmin, Object>(bundleContext, "org.osgi.service.cm.ConfigurationAdmin",

@@ -391,7 +406,7 @@
 		 */

 		public MBeanServer addingService(ServiceReference<MBeanServer> servicereference) {

 			try {

-				LOGGER.fine("Adding MBeanServer: " + servicereference);

+				log(LogService.LOG_INFO, "Adding MBeanServer: " + servicereference);

 				final MBeanServer mbeanServer = bundleContext.getService(servicereference);

 				mbeanServers.add(mbeanServer);

 				Runnable registration = new Runnable() {

@@ -406,7 +421,7 @@
 

 				return mbeanServer;

 			} catch (RuntimeException e) {

-				LOGGER.log(Level.SEVERE, "uncaught exception in addingService", e);

+				log(LogService.LOG_ERROR, "uncaught exception in addingService", e);

 				throw e;

 			}

 		}

@@ -422,7 +437,7 @@
 		 */

 		public void removedService(ServiceReference<MBeanServer> servicereference, Object obj) {

 			try {

-				LOGGER.fine("Removing MBeanServer: " + servicereference);

+				log(LogService.LOG_INFO, "Removing MBeanServer: " + servicereference);

 				final MBeanServer mbeanServer = bundleContext.getService(servicereference);

 				mbeanServers.remove(mbeanServer);

 				Runnable deregister = new Runnable() {

@@ -436,7 +451,7 @@
 				deregisterThread.start();

 

 			} catch (Throwable e) {

-				LOGGER.log(Level.FINE, "uncaught exception in removedService", e);

+				log(LogService.LOG_INFO, "uncaught exception in removedService", e);

 			}

 		}

 	}

@@ -455,27 +470,27 @@
 			try {

 				admin = bundleContext.getService(reference);

 			} catch (ClassCastException e) {

-				LOGGER.log(Level.SEVERE, "Incompatible class version for the Configuration Admin Manager", e);

+				log(LogService.LOG_ERROR, "Incompatible class version for the Configuration Admin Manager", e);

 				return bundleContext.getService(reference);

 			}

 

 			try {

-				manager = new StandardMBean(new ConfigAdminManager(admin), ConfigurationAdminMBean.class);

+				manager = new StandardMBean(new ConfigAdminManager(admin, logger), ConfigurationAdminMBean.class);

 			} catch (NotCompliantMBeanException e) {

-				LOGGER.log(Level.SEVERE, "Unable to create Configuration Admin Manager", e);

+				log(LogService.LOG_ERROR, "Unable to create Configuration Admin Manager", e);

 				return admin;

 			}

 			

 			for (MBeanServer mbeanServer : mbeanServers) {

-				LOGGER.fine("Registering configuration admin with MBeanServer: " + mbeanServer + " with name: " + configAdminName);

+				log(LogService.LOG_INFO, "Registering configuration admin with MBeanServer: " + mbeanServer + " with name: " + configAdminName);

 				try {

 					mbeanServer.registerMBean(manager, configAdminName);

 				} catch (InstanceAlreadyExistsException e) {

-					LOGGER.log(Level.FINE, "Cannot register Configuration Manager MBean", e);

+					log(LogService.LOG_INFO, "Cannot register Configuration Manager MBean", e);

 				} catch (MBeanRegistrationException e) {

-					LOGGER.log(Level.SEVERE, "Cannot register Configuration Manager MBean", e);

+					log(LogService.LOG_ERROR, "Cannot register Configuration Manager MBean", e);

 				} catch (NotCompliantMBeanException e) {

-					LOGGER.log(Level.SEVERE, "Cannot register Configuration Manager MBean", e);

+					log(LogService.LOG_ERROR, "Cannot register Configuration Manager MBean", e);

 				}

 			}

 			

@@ -494,13 +509,13 @@
 		public void removedService(ServiceReference<ConfigurationAdmin> reference, Object service) {

 

 			for (MBeanServer mbeanServer : mbeanServers) {

-				LOGGER.fine("deregistering configuration admin from: " + mbeanServer + " with name: " + configAdminName);

+				log(LogService.LOG_INFO, "deregistering configuration admin from: " + mbeanServer + " with name: " + configAdminName);

 				try {

 					mbeanServer.unregisterMBean(configAdminName);

 				} catch (InstanceNotFoundException e) {

-					LOGGER.fine("Configuration Manager MBean was never registered");

+					log(LogService.LOG_INFO, "Configuration Manager MBean was never registered");

 				} catch (MBeanRegistrationException e) {

-					LOGGER.log(Level.SEVERE, "Cannot deregister Configuration Manager MBean", e);

+					log(LogService.LOG_INFO, "Cannot deregister Configuration Manager MBean", e);

 				}

 			}

 		}

@@ -520,25 +535,25 @@
 			try {

 				admin = bundleContext.getService(reference);

 			} catch (ClassCastException e) {

-				LOGGER.log(Level.SEVERE, "Incompatible class version for the Permission Admin Manager", e);

+				log(LogService.LOG_ERROR, "Incompatible class version for the Permission Admin Manager", e);

 				return bundleContext.getService(reference);

 			}

 			try {

 				manager = new StandardMBean(new PermissionManager(admin), PermissionAdminMBean.class);

 			} catch (NotCompliantMBeanException e) {

-				LOGGER.log(Level.SEVERE, "Unable to create Permission Admin Manager", e);

+				log(LogService.LOG_ERROR, "Unable to create Permission Admin Manager", e);

 				return admin;

 			}

 			for (MBeanServer mbeanServer : mbeanServers) {

-				LOGGER.fine("Registering permission admin with MBeanServer: " + mbeanServer + " with name: " + permissionAdminName);

+				log(LogService.LOG_INFO, "Registering permission admin with MBeanServer: " + mbeanServer + " with name: " + permissionAdminName);

 				try {

 					mbeanServer.registerMBean(manager, permissionAdminName);

 				} catch (InstanceAlreadyExistsException e) {

-					LOGGER.log(Level.FINE, "Cannot register Permission Manager MBean", e);

+					log(LogService.LOG_INFO, "Cannot register Permission Manager MBean", e);

 				} catch (MBeanRegistrationException e) {

-					LOGGER.log(Level.SEVERE, "Cannot register Permission Manager MBean", e);

+					log(LogService.LOG_ERROR, "Cannot register Permission Manager MBean", e);

 				} catch (NotCompliantMBeanException e) {

-					LOGGER.log(Level.SEVERE, "Cannot register Permission Manager MBean", e);

+					log(LogService.LOG_ERROR, "Cannot register Permission Manager MBean", e);

 				}

 			}

 			return admin;

@@ -555,13 +570,13 @@
 		 */

 		public void removedService(ServiceReference<PermissionAdmin> reference, Object service) {

 			for (MBeanServer mbeanServer : mbeanServers) {

-				LOGGER.fine("deregistering permission admin with MBeanServer: " + mbeanServer + " with name: " + permissionAdminName);

+				log(LogService.LOG_INFO, "deregistering permission admin with MBeanServer: " + mbeanServer + " with name: " + permissionAdminName);

 				try {

 					mbeanServer.unregisterMBean(permissionAdminName);

 				} catch (InstanceNotFoundException e) {

-					LOGGER.fine("Permission Manager MBean was never registered");

+					log(LogService.LOG_INFO, "Permission Manager MBean was never registered");

 				} catch (MBeanRegistrationException e) {

-					LOGGER.log(Level.SEVERE, "Cannot deregister Permission Manager MBean", e);

+					log(LogService.LOG_ERROR, "Cannot deregister Permission Manager MBean", e);

 				}

 			}

 		}

@@ -582,27 +597,27 @@
 			try {

 				service = bundleContext.getService(reference);

 			} catch (ClassCastException e) {

-				LOGGER.log(Level.SEVERE, "Incompatible class version for the Provisioning service", e);

+				log(LogService.LOG_ERROR, "Incompatible class version for the Provisioning service", e);

 				return bundleContext.getService(reference);

 			}

 			

 			try {

 				provisioning = new StandardMBean(new Provisioning(service), ProvisioningServiceMBean.class);

 			} catch (NotCompliantMBeanException e) {

-				LOGGER.log(Level.SEVERE, "Unable to create Provisioning Service Manager", e);

+				log(LogService.LOG_ERROR, "Unable to create Provisioning Service Manager", e);

 				return service;

 			}

 			

 			for (MBeanServer mbeanServer : mbeanServers) {

-				LOGGER.fine("Registering provisioning service with MBeanServer: " + mbeanServer + " with name: " + provisioningServiceName);

+				log(LogService.LOG_INFO, "Registering provisioning service with MBeanServer: " + mbeanServer + " with name: " + provisioningServiceName);

 				try {

 					mbeanServer.registerMBean(provisioning, provisioningServiceName);

 				} catch (InstanceAlreadyExistsException e) {

-					LOGGER.log(Level.FINE, "Cannot register Provisioning Service MBean", e);

+					log(LogService.LOG_INFO, "Cannot register Provisioning Service MBean", e);

 				} catch (MBeanRegistrationException e) {

-					LOGGER.log(Level.SEVERE, "Cannot register Provisioning Service MBean", e);

+					log(LogService.LOG_ERROR, "Cannot register Provisioning Service MBean", e);

 				} catch (NotCompliantMBeanException e) {

-					LOGGER.log(Level.SEVERE, "Cannot register Provisioning Service MBean", e);

+					log(LogService.LOG_ERROR, "Cannot register Provisioning Service MBean", e);

 				}

 			}

 			return service;

@@ -619,13 +634,13 @@
 		 */

 		public void removedService(ServiceReference<ProvisioningService> reference, Object service) {

 			for (MBeanServer mbeanServer : mbeanServers) {

-				LOGGER.fine("deregistering provisioning service with MBeanServer: " + mbeanServer + " with name: " + provisioningServiceName);

+				log(LogService.LOG_INFO, "deregistering provisioning service with MBeanServer: " + mbeanServer + " with name: " + provisioningServiceName);

 				try {

 					mbeanServer.unregisterMBean(provisioningServiceName);

 				} catch (InstanceNotFoundException e) {

-					LOGGER.fine("Provisioning Service MBean was never registered");

+					log(LogService.LOG_INFO, "Provisioning Service MBean was never registered");

 				} catch (MBeanRegistrationException e) {

-					LOGGER.log(Level.SEVERE, "Cannot deregister Provisioning Service MBean", e);

+					log(LogService.LOG_ERROR, "Cannot deregister Provisioning Service MBean", e);

 				}

 			}

 		}

@@ -645,27 +660,27 @@
 			try {

 				admin = bundleContext.getService(reference);

 			} catch (ClassCastException e) {

-				LOGGER.log(Level.SEVERE, "Incompatible class version for the User Admin manager", e);

+				log(LogService.LOG_ERROR, "Incompatible class version for the User Admin manager", e);

 				return bundleContext.getService(reference);

 			}

 			

 			try {

 				manager = new StandardMBean(new UserManager(admin), UserAdminMBean.class);

 			} catch (NotCompliantMBeanException e1) {

-				LOGGER.log(Level.SEVERE, "Unable to create User Admin Manager");

+				log(LogService.LOG_ERROR, "Unable to create User Admin Manager");

 				return admin;

 			}

 			

 			for (MBeanServer mbeanServer : mbeanServers) {

-				LOGGER.fine("Registering user admin with MBeanServer: " + mbeanServer + " with name: " + userAdminName);

+				log(LogService.LOG_INFO, "Registering user admin with MBeanServer: " + mbeanServer + " with name: " + userAdminName);

 				try {

 					mbeanServer.registerMBean(manager, userAdminName);

 				} catch (InstanceAlreadyExistsException e) {

-					LOGGER.log(Level.FINE, "Cannot register User Manager MBean", e);

+					log(LogService.LOG_INFO, "Cannot register User Manager MBean", e);

 				} catch (MBeanRegistrationException e) {

-					LOGGER.log(Level.SEVERE, "Cannot register User Manager MBean", e);

+					log(LogService.LOG_ERROR, "Cannot register User Manager MBean", e);

 				} catch (NotCompliantMBeanException e) {

-					LOGGER.log(Level.SEVERE, "Cannot register User Manager MBean", e);

+					log(LogService.LOG_ERROR, "Cannot register User Manager MBean", e);

 				}

 			}

 			return admin;

@@ -682,16 +697,38 @@
 		 */

 		public void removedService(ServiceReference<UserAdmin> reference, Object service) {

 			for (MBeanServer mbeanServer : mbeanServers) {

-				LOGGER.fine("Deregistering user admin with MBeanServer: " + mbeanServer + " with name: " + userAdminName);

+				log(LogService.LOG_INFO, "Deregistering user admin with MBeanServer: " + mbeanServer + " with name: " + userAdminName);

 				try {

 					mbeanServer.unregisterMBean(userAdminName);

 				} catch (InstanceNotFoundException e) {

-					LOGGER.fine("User Manager MBean was never registered");

+					log(LogService.LOG_INFO, "User Manager MBean was never registered");

 				} catch (MBeanRegistrationException e) {

-					LOGGER.log(Level.SEVERE, "Cannot deregister User Manager MBean", e);

+					log(LogService.LOG_ERROR, "Cannot deregister User Manager MBean", e);

 				}

 			}

 		}

 	}

 	

+	private class LogServiceTracker implements ServiceTrackerCustomizer<LogService, Object> {

+

+		@Override

+		public Object addingService(ServiceReference<LogService> reference) {

+			logger = bundleContext.getService(reference);

+			return logger;

+		}

+

+		@Override

+		public void modifiedService(ServiceReference<LogService> reference,

+				Object service) {

+			// no op

+		}

+

+		@Override

+		public void removedService(ServiceReference<LogService> reference,

+				Object service) {

+			logger = null;

+		}

+		

+	}

+	

 }

diff --git a/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/DefaultObjectNameTranslator.java b/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/DefaultObjectNameTranslator.java
index 8683e90..a324e83 100755
--- a/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/DefaultObjectNameTranslator.java
+++ b/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/DefaultObjectNameTranslator.java
@@ -21,6 +21,7 @@
 import org.osgi.framework.wiring.BundleRevision;

 import org.osgi.framework.wiring.BundleWire;

 import org.osgi.framework.wiring.BundleWiring;

+import org.osgi.service.log.LogService;

 

 /**

  * {@link DefaultObjectNameTranslator} is a default implementation of {@link ObjectNameTranslator} which maps each

@@ -32,7 +33,7 @@
  */

 final class DefaultObjectNameTranslator implements ObjectNameTranslator {

 

-	private static final Logger LOGGER = Logger.getLogger(DefaultObjectNameTranslator.class.getCanonicalName());

+//	private static final Logger LOGGER = Logger.getLogger(DefaultObjectNameTranslator.class.getCanonicalName());

 	

     /**

      * {@inheritDoc}

@@ -52,7 +53,7 @@
      * @throws InstantiationException if the configured class cannot be instantiated

      * @throws IllegalAccessException if the configured class or its default constructor is not accessible

      */

-    static ObjectNameTranslator initialiseObjectNameTranslator(BundleContext bundleContext) throws ClassNotFoundException, InstantiationException,

+    static ObjectNameTranslator initialiseObjectNameTranslator(BundleContext bundleContext, LogService logger) throws ClassNotFoundException, InstantiationException,

         IllegalAccessException {

         Bundle bundle = bundleContext.getBundle();

 		BundleWiring wiring = bundle.adapt(BundleWiring.class);

@@ -66,10 +67,14 @@
 			        try {

 						return (ObjectNameTranslator) objectNameTranslatorClass.getConstructor(BundleContext.class).newInstance(bundleContext);

 					} catch (Exception e) {

-						LOGGER.warning(String.format("Unable to create ObjectNameTranslator from fragment %d '%s'", fragment.getBundleId(), e.getMessage()));

+						if (logger != null) {

+							logger.log(LogService.LOG_WARNING, String.format("Unable to create ObjectNameTranslator from fragment %d '%s'", fragment.getBundleId(), e.getMessage()));

+						}

 					} 

 		        } else {

-					LOGGER.warning(String.format("Unable to create ObjectNameTranslator as specified class '%s' is not an assignable to '%s'", objectNameTranslator, ObjectNameTranslator.class.getName()));

+		        	if (logger != null) {

+		        		logger.log(LogService.LOG_WARNING, String.format("Unable to create ObjectNameTranslator as specified class '%s' is not an assignable to '%s'", objectNameTranslator, ObjectNameTranslator.class.getName()));

+		        	}

 		        }

 			}

 		}

diff --git a/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/configurationadmin/ConfigAdminManager.java b/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/configurationadmin/ConfigAdminManager.java
index 03ef2f9..dd8b22c 100644
--- a/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/configurationadmin/ConfigAdminManager.java
+++ b/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/configurationadmin/ConfigAdminManager.java
@@ -30,6 +30,7 @@
 import org.osgi.jmx.service.cm.ConfigurationAdminMBean;

 import org.osgi.service.cm.Configuration;

 import org.osgi.service.cm.ConfigurationAdmin;

+import org.osgi.service.log.LogService;

 

 /** 

  * 

@@ -38,10 +39,17 @@
 

 	private final ConfigurationAdmin admin;

 	

-	private static final Logger log = Logger.getLogger(ConfigAdminManager.class.getCanonicalName());

+	private final LogService logger;

 

-	public ConfigAdminManager(ConfigurationAdmin admin) {

+	public ConfigAdminManager(ConfigurationAdmin admin, LogService logger) {

 		this.admin = admin;

+		this.logger = logger;

+	}

+	

+	private void log(int level, String message, Throwable t) {

+		if (logger != null) {

+			logger.log(level, message, t);

+		}

 	}

 

 	/**

@@ -96,7 +104,7 @@
 		try {

 			confs = admin.listConfigurations(filter);

 		} catch (InvalidSyntaxException e) {

-			log.log(Level.SEVERE, "Invalid filter argument: " + filter, e);

+			log(LogService.LOG_ERROR, "Invalid filter argument: " + filter, e);

 			throw new IOException("Invalid filter: " + e);

 		}

 		if (confs != null) {

@@ -169,7 +177,7 @@
 		try {

 			configurations = admin.listConfigurations(filter);

 		} catch (InvalidSyntaxException e) {

-			log.log(Level.SEVERE, "Invalid filter argument: " + filter, e);

+			log(LogService.LOG_ERROR, "Invalid filter argument: " + filter, e);

 			throw new IOException("Invalid filter: " + e);

 		}

 		if (configurations != null) {