ant-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ceki Gülcü <c...@qos.ch>
Subject Avoiding logging loops
Date Mon, 10 Jan 2005 19:43:03 GMT

Hello,

While running test cases for log4j, I have noticed that our latest
version produces an infinite loop in Project.fireMessageLoggedEvent()
since in our test version, org.apache.log4j.Logger.getLogger()
generates output on the console, which triggers another call to
fireMessageLoggedEvent, hence the infinite loop.

Would it be possible to modify Project.fireMessageLoggedEvent() so
that it ignores recursive calls to fireMessageLogged() instead of
throwing a BuildException? Here is the proposed change:

NOW:

    synchronized (this) {
       if (loggingMessage) {
          throw new BuildException("Listener attempted to access "
               + (priority == MSG_ERR ? "System.err" : "System.out")
               + " with message [" + message
               + "] - infinite loop terminated");
       }

       try {
          loggingMessage = true;
          Iterator iter = listeners.iterator();
          while (iter.hasNext()) {
             BuildListener listener = (BuildListener) iter.next();
             listener.messageLogged(event);
           }
       } finally {
         loggingMessage = false;
       }
    }

PROPOSED CHANGE:

    synchronized (this) {
      if (loggingMessage) {
        return;
      }
      ... the rest remains the same



If this change is unacceptable, would you consider adding infinite
loop detection in Log4jListener.messageLogged(BuildEvent event)?

Many thanks in advance,


-- 
Ceki Gülcü

   The complete log4j manual: http://www.qos.ch/log4j/



---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
For additional commands, e-mail: user-help@ant.apache.org


Mime
View raw message