/**
* (C) Copyright 2013 Jabylon (http://www.jabylon.org) and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jabylon.cdo.server.logging;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.jabylon.cdo.server.ServerConstants;
import org.osgi.service.log.LogEntry;
import org.osgi.service.log.LogListener;
import org.osgi.service.log.LogReaderService;
import org.osgi.service.log.LogService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.Marker;
import org.slf4j.helpers.BasicMarkerFactory;
/**
* pipes OSGi log events to SLF4j.
* Only useful for eclipse, so we have a nice logging backend (logback)
*
*/
@Component
public class OSGiLogger implements LogListener {
@Reference
private LogReaderService logReader;
private Logger logger = LoggerFactory.getLogger(OSGiLogger.class);
private BasicMarkerFactory factory = new BasicMarkerFactory();
public void bindLogReader(LogReaderService service) {
if(!ServerConstants.IS_KARAF) {
this.logReader = service;
logReader.addLogListener(this);
}
}
public void unbindLogReader(LogReaderService service) {
if(!ServerConstants.IS_KARAF) {
service.removeLogListener(this);
logReader = null;
}
}
@Override
public void logged(LogEntry entry) {
Marker marker = null;
if (entry.getBundle() != null)
marker = factory.getMarker(entry.getBundle().getSymbolicName());
switch (entry.getLevel()) {
case LogService.LOG_DEBUG:
logger.debug(marker, entry.getMessage(), entry.getException());
break;
case LogService.LOG_ERROR:
logger.error(marker, entry.getMessage(), entry.getException());
break;
case LogService.LOG_INFO:
logger.info(marker, entry.getMessage(), entry.getException());
break;
case LogService.LOG_WARNING:
logger.warn(marker, entry.getMessage(), entry.getException());
break;
}
}
}