In order to send a log message, a component must create a LogEvent object, then broadcast that object to all LogListener objects attached to the component.

This operation is best placed in a method that can be called quickly. For example, the following implementation includes such convenience methods:

Vector mLogListeners;
public synchronized void addLogListener (LogListener pListener){
  if (mLogListeners == null) mLogListeners = new Vector ();
  mLogListeners.addElement (pListener);
public synchronized void removeLogListener (LogListener pListener){
  if (mLogListeners != null)
  mLogListeners.removeElement (pListener);
public int getLogListenerCount (){
  return (mLogListeners == null) ? 0 : mLogListeners.size ();
public synchronized void sendLogEvent (LogEvent pLogEvent){
  if (mLogListeners != null) {
    int len = mLogListeners.size ();
    for (int i = 0; i < len; i++) {
      ((LogListener) mLogListeners.elementAt (i)).logEvent (pLogEvent);
public void logError (String pMessage){
  logError (pMessage, null);
public void logError (Throwable pThrowable){
  logError (null, pThrowable);
public void logError (String pMessage, Throwable pThrowable){
  sendLogEvent (new ErrorLogEvent (pMessage, pThrowable));

With these methods available, the component can now send error events like this:

// Log an error
if (isLoggingError ()) {
  logError ("Look out, it's gonna blow!");