package org.goko.log; import org.eclipse.equinox.log.ExtendedLogReaderService; import org.eclipse.equinox.log.LogFilter; import org.osgi.framework.Bundle; import org.osgi.service.log.LogEntry; import org.osgi.service.log.LogListener; import org.osgi.service.log.LogService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class EquinoxSlf4jBridge implements LogListener, LogFilter { private static final Logger LOG = LoggerFactory.getLogger("OSGI Log"); private ExtendedLogReaderService logReaderService; public void addLogReaderService(ExtendedLogReaderService lrs){ logReaderService = lrs; } public void removeLogReaderService(ExtendedLogReaderService lrs){ if(logReaderService == lrs){ logReaderService = null; } } public void startup(){ logReaderService.addLogListener(this); } public void shutdown(){ logReaderService.removeLogListener(this); } public String getLevelAsString(int level){ switch(level){ case LogService.LOG_INFO : return "Info"; case LogService.LOG_ERROR : return "Error"; case LogService.LOG_WARNING : return "Warn"; case LogService.LOG_DEBUG : return "Debug"; default: return "Info"; } } @Override public void logged(LogEntry entry) { if(isLoggable(entry.getBundle(), null, entry.getLevel())){ StringBuffer buffer = new StringBuffer(); buffer.append( " [ Bundle = "); buffer.append( entry.getBundle().getSymbolicName()); buffer.append("] "); buffer.append(getLevelAsString(entry.getLevel())); buffer.append( entry.getMessage()); switch(entry.getLevel()){ case LogService.LOG_INFO : LOG.info(buffer.toString()); break; case LogService.LOG_ERROR : LOG.error(buffer.toString()); break; case LogService.LOG_WARNING : LOG.warn(buffer.toString());; break; case LogService.LOG_DEBUG : LOG.debug(buffer.toString()); break; } } } @Override public boolean isLoggable(Bundle bundle, String loggerName, int logLevel) { return true;//StringUtils.startsWithIgnoreCase(bundle.getSymbolicName(), BUNDLE_PREFIX); } }