package org.ovirt.engine.core.logger; import java.util.List; import java.util.Observable; import java.util.Observer; import java.util.logging.Handler; import java.util.logging.LogRecord; import org.ovirt.engine.api.extensions.Base; import org.ovirt.engine.api.extensions.ExtMap; import org.ovirt.engine.api.extensions.logger.Logger; import org.ovirt.engine.core.extensions.mgr.ExtensionProxy; import org.ovirt.engine.core.utils.extensionsmgr.EngineExtensionsManager; public class LoggerHandler extends Handler implements Observer { private volatile List<ExtensionProxy> extensions; public LoggerHandler() { EngineExtensionsManager.getInstance().addObserver(this); update(null, null); } @Override public void publish(LogRecord record) { ExtMap publishInputMap = new ExtMap() .mput(Base.InvokeKeys.COMMAND, Logger.InvokeCommands.PUBLISH) .mput(Logger.InvokeKeys.LOG_RECORD, record); ExtMap publishOutputMap = new ExtMap(); for (ExtensionProxy extension : extensions) { try { extension.invoke( publishInputMap, publishOutputMap); } catch(Exception ex) { // ignore, logging this exception will result in infinite loop } } } @Override public void flush() { for (ExtensionProxy extension : extensions) { try { extension.invoke(new ExtMap() .mput(Base.InvokeKeys.COMMAND, Logger.InvokeCommands.FLUSH), true, true); } catch(Exception ex) { // ignore, logging this exception will result in infinite loop } } } @Override public void close() throws SecurityException { for (ExtensionProxy extension : extensions) { try { extension.invoke(new ExtMap() .mput(Base.InvokeKeys.COMMAND, Logger.InvokeCommands.CLOSE), true, true); } catch(Exception ex) { // ignore, logging this exception will result in infinite loop } } } @Override public void update(Observable o, Object arg) { extensions = EngineExtensionsManager.getInstance().getExtensionsByService(Logger.class.getName()); } }