blob: 8b72c7c6867311d54f091771be8a63a5b223b170 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2007 Boeing.
* 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
*
* Contributors:
* Boeing - initial API and implementation
*******************************************************************************/
package org.eclipse.osee.logger.slf4j.internal;
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;
import org.slf4j.Marker;
import org.slf4j.MarkerFactory;
/**
* @author Roberto E. Escobar
*/
public class Slf4jLogListener implements LogListener {
private static final Logger logger = LoggerFactory.getLogger(Slf4jLogListener.class);
private static final String[] remapMessages = new String[] {"Bundle Event", "Service Event"};
@Override
public void logged(LogEntry entry) {
try {
String symbolicName = entry.getBundle().getSymbolicName();
Logger logger = LoggerFactory.getLogger(symbolicName);
Marker marker = MarkerFactory.getMarker(symbolicName);
logLogEntry(logger, entry.getLevel(), marker, entry.getMessage(), entry.getException());
} catch (Exception ex) {
logger.error("Error during log listening", ex);
}
}
private void logLogEntry(Logger logger, int level, Marker marker, String message, Throwable throwable) {
int theLevel = level;
if (throwable == null || isOSGIMessage(message)) {
theLevel = LogService.LOG_DEBUG;
}
String originalName = Thread.currentThread().getName();
try {
Thread.currentThread().setName("Osgi Log Service");
switch (theLevel) {
case LogService.LOG_DEBUG:
logger.debug(marker, message, throwable);
break;
case LogService.LOG_ERROR:
logger.error(marker, message, throwable);
break;
case LogService.LOG_WARNING:
logger.warn(marker, message, throwable);
break;
case LogService.LOG_INFO:
logger.info(marker, message, throwable);
break;
default:
logger.trace(marker, message, throwable);
break;
}
} finally {
Thread.currentThread().setName(originalName);
}
}
private boolean isOSGIMessage(String message) {
for (String toCheck : remapMessages) {
if (message.startsWith(toCheck)) {
return true;
}
}
return false;
}
}