package com.netifera.platform.kernel.internal; import java.io.PrintWriter; import java.io.StringWriter; import org.osgi.service.log.LogEntry; import org.osgi.service.log.LogListener; import org.osgi.service.log.LogReaderService; import org.osgi.service.log.LogService; public class KernelLogReaderComponent implements LogListener { private final static int level = LogService.LOG_DEBUG; private final static String[] filters = { "BundleEvent", "ServiceEvent", "FrameworkEvent" }; public void logged(LogEntry entry) { if(filtered(entry)) return; StringWriter output = new StringWriter(); PrintWriter pw = new PrintWriter(output); if(entry.getLevel() > level) { return; } switch(entry.getLevel()) { case LogService.LOG_DEBUG: pw.print("DEBUG: "); break; case LogService.LOG_INFO: pw.print("INFO: "); break; case LogService.LOG_WARNING: pw.print("WARNING: "); break; case LogService.LOG_ERROR: pw.print("ERROR: "); break; } pw.print(entry.getMessage()); Throwable exception = entry.getException(); if(exception != null) { if(exception.getMessage() != null) { pw.println(exception.getMessage()); } exception.printStackTrace(pw); } pw.flush(); switch(entry.getLevel()) { case LogService.LOG_ERROR: System.err.println(output.toString()); break; default: System.out.println(output.toString()); } } private boolean filtered(LogEntry entry) { for(String prefix : filters) { if(entry.getMessage().startsWith(prefix)) { return true; } } return false; } protected void registerLogReader(LogReaderService reader) { reader.addLogListener(this); } protected void unregisterLogReader(LogReaderService reader) { reader.removeLogListener(this); } }