package osgi.enroute.logging.provider; import java.util.concurrent.Callable; import org.osgi.framework.Bundle; import org.osgi.service.log.LogService; import osgi.enroute.logging.messages.api.LogBook; public abstract class MessageFormatter implements LogBook { final String scope; final Bundle bundle; LogAdminImpl admin; LogService log; volatile boolean info = true; volatile boolean trace = true; volatile boolean debug = true; volatile boolean warn = true; volatile boolean error = true; volatile boolean exceptions = true; MessageFormatter(LogAdminImpl admin, Bundle bundle, String scope) { this.admin = admin; this.bundle = bundle; this.scope = scope; } @Override public INFO info(String format, Object... arguments) { if (info) admin.message(this, LogService.LOG_INFO, format, arguments); return null; } @Override public DEBUG debug(String format, Object... arguments) { if (debug) admin.message(this, LogService.LOG_DEBUG, format, arguments); return null; } @Override public ERROR error(String format, Object... arguments) { if (error) admin.message(this, LogService.LOG_ERROR, format, arguments); return null; } @Override public TRACE trace(String format, Object... arguments) { if (trace) admin.message(this, LogAdminImpl.LOG_TRACE, format, arguments); return null; } @Override public WARN warn(String format, Object... arguments) { if (warn) admin.message(this, LogService.LOG_WARNING, format, arguments); return null; } @Override public String getName() { return scope; } @Override public boolean isInfoEnabled() { return info; } @Override public boolean isDebugEnabled() { return debug; } @Override public boolean isErrorEnabled() { return error; } @Override public boolean isTraceEnabled() { return trace; } @Override public boolean isWarnEnabled() { return true; } public void close() { info = trace = error = warn = debug = false; admin = null; } @Override public Runnable wrap(final Runnable r, final String name) { return new Runnable() { public void run() { debug("Starting %s in thread %s", name, Thread.currentThread().getName()); try { r.run(); } catch (Exception e) { error("Error in %s in thread %s", name, Thread.currentThread().getName()); } finally { debug("Leaving %s in thread %s", name, Thread.currentThread().getName()); } } }; } @Override public <T> Callable<T> wrap(final Callable<T> c, final String name) { return new Callable<T>() { public T call() { debug("Starting %s in thread %s", name, Thread.currentThread().getName()); try { return c.call(); } catch (Exception e) { error("Error in %s in thread %s", name, Thread.currentThread().getName()); } finally { debug("Leaving %s in thread %s", name, Thread.currentThread().getName()); } return null; } }; } }