When I see code like:

                    LOGGER.debug("RollingFileManager executing async {}",
descriptor.getAsynchronous());
                    thread = new Log4jThread(new
AsyncAction(descriptor.getAsynchronous(), this));
                    thread.start();

and:

            final Thread thread = new Log4jThread(new
ReconfigurationWorker(listener, reconfigurable));
            thread.setDaemon(true);
            thread.start();

and other places, I think: "and poof, I've lost track of that thread".

What if we used a thread pool (ExecutorService) to track all of our
threads? This would allow for at least trying for an orderly shutdown. This
would avoid problems like one part of an app thinking that rollovers should
be done when they are not because a log4j context has been stopped (like in
our test probably) but the rollover thread is still going about doing its
work.

This would be for 2.7 I think.

We could then have a different context stop API, maybe with a timeout or
not, something like ExecutorService's shutdown() vs. shutdownNow().

Thoughts?

Happy 4th!

Gary

-- 
E-Mail: garydgreg...@gmail.com | ggreg...@apache.org
Java Persistence with Hibernate, Second Edition
<http://www.manning.com/bauer3/>
JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
Spring Batch in Action <http://www.manning.com/templier/>
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory

Reply via email to