Author: jconlon Date: Wed Feb 7 22:26:50 2007 New Revision: 718 Added: slf4j/trunk/osgi-over-slf4j/ slf4j/trunk/osgi-over-slf4j/pom.xml slf4j/trunk/osgi-over-slf4j/src/ slf4j/trunk/osgi-over-slf4j/src/main/ slf4j/trunk/osgi-over-slf4j/src/main/java/ slf4j/trunk/osgi-over-slf4j/src/main/java/org/ slf4j/trunk/osgi-over-slf4j/src/main/java/org/slf4j/ slf4j/trunk/osgi-over-slf4j/src/main/java/org/slf4j/osgi/ slf4j/trunk/osgi-over-slf4j/src/main/java/org/slf4j/osgi/logservice/ slf4j/trunk/osgi-over-slf4j/src/main/java/org/slf4j/osgi/logservice/impl/ slf4j/trunk/osgi-over-slf4j/src/main/java/org/slf4j/osgi/logservice/impl/Activator.java slf4j/trunk/osgi-over-slf4j/src/main/java/org/slf4j/osgi/logservice/impl/LogServiceFactory.java slf4j/trunk/osgi-over-slf4j/src/main/java/org/slf4j/osgi/logservice/impl/LogServiceImpl.java
Log: A slf4j OSGi LogService implementation. Added: slf4j/trunk/osgi-over-slf4j/pom.xml ============================================================================== --- (empty file) +++ slf4j/trunk/osgi-over-slf4j/pom.xml Wed Feb 7 22:26:50 2007 @@ -0,0 +1,64 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <parent> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-parent</artifactId> + <version>1.3.0-SNAPSHOT</version> + </parent> + + <modelVersion>4.0.0</modelVersion> + + <groupId>org.slf4j</groupId> + <artifactId>osgi-over-slf4j</artifactId> + <version>${parent.version}</version> + <packaging>bundle</packaging> + <name>OSGi LogService Implemented Over SLF4J</name> + + <url>http://www.slf4j.org</url> + <description> + OSGi LogService implementation over SLF4J + </description> + + <dependencies> + <dependency> + <groupId>org.osgi</groupId> + <artifactId>org.osgi.core</artifactId> + <version>4.0</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.osgi</groupId> + <artifactId>org.osgi.compendium</artifactId> + <version>4.0</version> + <scope>provided</scope> + </dependency> + + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-simple</artifactId> + <version>${project.version}</version> + <scope>provided</scope> + </dependency> + </dependencies> + <build> + <plugins> + <plugin> + <groupId>org.apache.felix</groupId> + <artifactId>maven-bundle-plugin</artifactId> + <version>0.9.0-incubator-SNAPSHOT</version> + <extensions>true</extensions> + <configuration> + <instructions> + <Export-Package> + org.osgi.service.log + </Export-Package> + <Import-Package>org.slf4j;version="[1.3,1.4)",*</Import-Package> + <Private-Package>org.slf4j.osgi.logservice.impl</Private-Package> + <Bundle-Activator>org.slf4j.osgi.logservice.impl.Activator</Bundle-Activator> + </instructions> + </configuration> + </plugin> + </plugins> + </build> + +</project> \ No newline at end of file Added: slf4j/trunk/osgi-over-slf4j/src/main/java/org/slf4j/osgi/logservice/impl/Activator.java ============================================================================== --- (empty file) +++ slf4j/trunk/osgi-over-slf4j/src/main/java/org/slf4j/osgi/logservice/impl/Activator.java Wed Feb 7 22:26:50 2007 @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2004-2005 QOS.ch + * + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY + * SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER + * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF + * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. + * + */ + +package org.slf4j.osgi.logservice.impl; + +import java.util.Hashtable; + +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceFactory; +import org.osgi.service.log.LogService; + +/** + * <code>Activator</code> implements a simple bundle that registers a + * [EMAIL PROTECTED] LogServiceFactory} for the creation of [EMAIL PROTECTED] LogService} implementations. +**/ +public class Activator implements BundleActivator { + + /** + * + * Implements <code>BundleActivator.start()</code> to register a + * LogServiceFactory. + * + * @param bundleContext the framework context for the bundle + * @throws Exception + */ + public void start(BundleContext bundleContext) throws Exception { + Hashtable props = new Hashtable(); + props.put("description", "An slf4j implementation."); + ServiceFactory factory = new LogServiceFactory(); + bundleContext.registerService(LogService.class.getName(), factory, props); + } + + /** + * + * Implements <code>BundleActivator.stop()</code>. + * + * @param bundleContext the framework context for the bundle + * @throws Exception + */ + public void stop(BundleContext bundleContext) throws Exception { + + // Note: It is not required that we remove the service here, since + // the framework will do it automatically anyway. + } + + +} Added: slf4j/trunk/osgi-over-slf4j/src/main/java/org/slf4j/osgi/logservice/impl/LogServiceFactory.java ============================================================================== --- (empty file) +++ slf4j/trunk/osgi-over-slf4j/src/main/java/org/slf4j/osgi/logservice/impl/LogServiceFactory.java Wed Feb 7 22:26:50 2007 @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2004-2005 QOS.ch + * + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY + * SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER + * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF + * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. + * + */ + +package org.slf4j.osgi.logservice.impl; + +import org.osgi.framework.Bundle; +import org.osgi.framework.ServiceFactory; +import org.osgi.framework.ServiceRegistration; + +/** + * <code>LogServiceFactory</code> creates LogService implemenations. + * + * @author John Conlon + * @version $Rev$, $Date$ + */ +public class LogServiceFactory implements ServiceFactory +{ + + + /* (non-Javadoc) + * @see org.osgi.framework.ServiceFactory#getService(org.osgi.framework.Bundle, org.osgi.framework.ServiceRegistration) + */ + public Object getService( Bundle bundle, ServiceRegistration arg1 ) + { + + return new LogServiceImpl(bundle); + } + + + /* (non-Javadoc) + * @see org.osgi.framework.ServiceFactory#ungetService(org.osgi.framework.Bundle, org.osgi.framework.ServiceRegistration, java.lang.Object) + */ + public void ungetService( Bundle bundle, ServiceRegistration arg1, Object arg2 ) + { + // Ignore for now + + } + +} Added: slf4j/trunk/osgi-over-slf4j/src/main/java/org/slf4j/osgi/logservice/impl/LogServiceImpl.java ============================================================================== --- (empty file) +++ slf4j/trunk/osgi-over-slf4j/src/main/java/org/slf4j/osgi/logservice/impl/LogServiceImpl.java Wed Feb 7 22:26:50 2007 @@ -0,0 +1,189 @@ +/* + * Copyright (c) 2004-2005 QOS.ch + * + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY + * SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER + * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF + * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. + * + */ + +package org.slf4j.osgi.logservice.impl; + +import org.osgi.framework.Bundle; +import org.osgi.framework.Constants; +import org.osgi.framework.ServiceReference; +import org.osgi.service.log.LogService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * <code>LogServiceImpl</code> is a simple OSGi LogService implemenation that delegates to a slf4j + * Logger. + * + * @author John Conlon + */ +public class LogServiceImpl implements LogService { + + private static final String UNKNOWN = "[Unknown]"; + + private final Logger delegate; + + /** + * Creates a new instance of LogServiceImpl. + * + */ + public LogServiceImpl(Bundle bundle) { + String name = (String) bundle.getHeaders().get( + Constants.BUNDLE_SYMBOLICNAME); + String version = (String) bundle.getHeaders().get( + Constants.BUNDLE_VERSION); + delegate = LoggerFactory.getLogger(name + '.' + version); + } + + /* + * (non-Javadoc) + * + * @see org.osgi.service.log.LogService#log(int, java.lang.String) + */ + public void log(int level, String message) { + switch (level) { + case LOG_DEBUG: + delegate.debug(message); + break; + case LOG_ERROR: + delegate.error(message); + break; + case LOG_INFO: + delegate.info(message); + break; + case LOG_WARNING: + delegate.warn(message); + break; + default: + break; + } + + } + + /* + * (non-Javadoc) + * + * @see org.osgi.service.log.LogService#log(int, java.lang.String, + * java.lang.Throwable) + */ + public void log(int level, String message, Throwable exception) { + switch (level) { + case LOG_DEBUG: + delegate.debug(message, exception); + break; + case LOG_ERROR: + delegate.error(message, exception); + break; + case LOG_INFO: + delegate.info(message, exception); + break; + case LOG_WARNING: + delegate.warn(message, exception); + break; + default: + break; + } + } + + /* + * (non-Javadoc) + * + * @see org.osgi.service.log.LogService#log(org.osgi.framework.ServiceReference, + * int, java.lang.String) + */ + public void log(ServiceReference sr, int level, String message) { + String output = createMessage(sr, message); + + switch (level) { + case LOG_DEBUG: + delegate.debug(output); + break; + case LOG_ERROR: + delegate.error(output); + break; + case LOG_INFO: + delegate.info(output); + break; + case LOG_WARNING: + delegate.warn(output); + break; + default: + break; + } + } + + /** + * createMessage. + * + * @param sr + * @param message + * @return + */ + private String createMessage(ServiceReference sr, String message) { + StringBuffer output = new StringBuffer(); + if (sr != null) { + output.append('[').append(sr.toString()).append(']') + .append(message); + } else { + output.append(UNKNOWN).append(message); + } + return output.toString(); + } + + /* + * (non-Javadoc) + * + * @see org.osgi.service.log.LogService#log(org.osgi.framework.ServiceReference, + * int, java.lang.String, java.lang.Throwable) + */ + public void log(ServiceReference sr, int level, String message, + Throwable exception) { + String output = createMessage(sr, message); + + switch (level) { + case LOG_DEBUG: + delegate.debug(output, exception); + break; + case LOG_ERROR: + delegate.error(output, exception); + break; + case LOG_INFO: + delegate.info(output, exception); + break; + case LOG_WARNING: + delegate.warn(output, exception); + break; + default: + break; + } + } + +} _______________________________________________ dev mailing list [email protected] http://www.slf4j.org/mailman/listinfo/dev
