/*******************************************************************************
* Copyright (c) 2009 Neil Bartlett.
* 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:
* Neil Bartlett - initial API and implementation
******************************************************************************/
package com.rabbitmq.client.osgi.common;
import java.io.PrintStream;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.service.log.LogService;
import org.osgi.util.tracker.ServiceTracker;
public class LogTracker extends ServiceTracker implements LogService {
public LogTracker(BundleContext context) {
super(context, LogService.class.getName(), null);
}
public void log(int level, String message) {
log(null, level, message, null);
}
public void log(int level, String message, Throwable exception) {
log(null, level, message, exception);
}
public void log(ServiceReference sr, int level, String message) {
log(sr, level, message, null);
}
public void log(ServiceReference sr, int level, String message,
Throwable exception) {
LogService log = (LogService) getService();
if(log != null) {
log.log(sr, level, message, exception);
} else {
// Generate the log line
StringBuffer buffer = new StringBuffer();
buffer.append(getLvlString(level)).append(": ").append(message);
if(sr != null) {
buffer.append(" [").append(sr).append("]");
}
if(exception != null) {
buffer.append(" -> ").append(exception.getMessage()).append(" (").append(exception.getClass().getName()).append(")");
}
// Print it
PrintStream ps = (level == LogService.LOG_ERROR) ? System.err : System.out;
ps.println(buffer.toString());
if(exception != null) {
exception.printStackTrace(ps);
}
}
}
private static String getLvlString(int level) {
String result;
switch(level) {
case LogService.LOG_DEBUG:
result = "DEBUG";
break;
case LogService.LOG_INFO:
result = "INFO";
break;
case LogService.LOG_WARNING:
result = "WARNING";
break;
case LogService.LOG_ERROR:
result = "ERROR";
break;
default:
result = "UNKNOWN";
}
return result;
}
}