/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.util.log;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import com.opengamma.util.ArgumentChecker;
/**
* A bridge designed to receive log messages from a compatible appender and forward them to any registered listeners
* through a standard interface. This allows application code to receive log messages regardless of the logging
* framework in use, and without a dependency on any such logging framework; a standard appender would be
* framework-specific.
*/
public final class LogBridge {
private static final LogBridge s_instance = new LogBridge();
private final Set<LogEventListener> _listeners = new CopyOnWriteArraySet<LogEventListener>();
//-------------------------------------------------------------------------
/**
* Hidden constructor.
*/
private LogBridge() {
}
/**
* Gets the bridge instance.
*
* @return the bridge instance, not null
*/
public static LogBridge getInstance() {
return s_instance;
}
//-------------------------------------------------------------------------
/**
* Adds a listener.
*
* @param listener the listener to add, not null
*/
public void addListener(LogEventListener listener) {
ArgumentChecker.notNull(listener, "listener");
_listeners.add(listener);
}
/**
* Removes a listener.
*
* @param listener the listener to remove, not null
*/
public void removeListener(LogEventListener listener) {
ArgumentChecker.notNull(listener, "listener");
_listeners.remove(listener);
}
/**
* Indicates whether the bridge has any listeners.
*
* @return true if the bridge has any listeners, false otherwise.
*/
public boolean hasListeners() {
return !_listeners.isEmpty();
}
//-------------------------------------------------------------------------
/**
* Passes a log event to all registered listeners.
*
* @param event the logging event, not null
*/
public void log(LogEvent event) {
for (LogEventListener listener : getListeners()) {
listener.log(event);
}
}
//-------------------------------------------------------------------------
private Set<LogEventListener> getListeners() {
return _listeners;
}
}