package com.buglabs.osgi.sewing;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.service.log.LogService;
/**
* Simple abstraction of logging so that sewing can have less dependencies on
* the BUG libraries
*
* @author bballantine
*
*/
public class LogManager {
private static LogService logService = null;
private static BundleContext context = null;
public static synchronized void setContext(BundleContext context) {
LogManager.context = context;
}
public static synchronized void log(int level, String message) {
log(level, message, null);
}
public static synchronized void log(int level, String message, Throwable exception) {
LogService logger = getLogService();
if (logger != null) {
if (exception == null)
logger.log(level, message);
else
logger.log(level, message, exception);
} else {
printLog(level, message, exception);
}
}
public static String stackTraceAsString(Throwable throwable) {
Writer writer = new StringWriter();
PrintWriter printWriter = new PrintWriter(writer);
throwable.printStackTrace(printWriter);
return writer.toString();
}
private static void printLog(int level, String message, Throwable exception) {
System.out.println('[' + getLevelString(level) + ']' + ' ' + message + " " + exception.getMessage());
if (level == LogService.LOG_DEBUG)
exception.printStackTrace();
}
private static String getLevelString(int level) {
switch (level) {
case LogService.LOG_DEBUG:
return "DEBUG";
case LogService.LOG_ERROR:
return "ERROR";
case LogService.LOG_INFO:
return "INFO";
case LogService.LOG_WARNING:
default:
return "WARNING";
}
}
private static synchronized LogService getLogService() {
if (logService == null && context != null) {
ServiceReference sr = context.getServiceReference(LogService.class.getName());
if (sr != null)
logService = (LogService) context.getService(sr);
}
return logService;
}
}