Nice! Sent from my iPhone
> On 2016/01/27, at 22:27, Mikael Ståldal <[email protected]> wrote: > > OK, also done. > >> On Wed, Jan 27, 2016 at 2:07 PM, Remko Popma <[email protected]> wrote: >> Perhaps you also want to add this to the LogManager.shutdown() methods, >> since I imagine that's what people will actually use/look at. >> >> Sent from my iPhone >> >>> On 2016/01/27, at 18:20, Mikael Ståldal <[email protected]> wrote: >>> >>> OK, done. >>> >>>> On Wed, Jan 27, 2016 at 6:17 AM, Remko Popma <[email protected]> wrote: >>>> Mikael, feel free to update the javadoc when you have time. >>>> >>>> >>>>> On Wednesday, 27 January 2016, Remko Popma <[email protected]> wrote: >>>>> Since the async loggers and appenders will wait until their queue has >>>>> been cleared by the background thread, it is a blocking call. >>>>> >>>>> We should probably add a sentence to the java doc to clarify this. >>>>> >>>>> Sent from my iPhone >>>>> >>>>>> On 2016/01/26, at 18:15, Mikael Ståldal <[email protected]> >>>>>> wrote: >>>>>> >>>>>> I think that we should be clear, in Javadoc, about whether this new >>>>>> method is synchronous/blocking or not. >>>>>> >>>>>> (I could say the same about quite a few existing methods as well, but >>>>>> let's at least start to be clear about new methods from now.) >>>>>> >>>>>>> On Tue, Jan 26, 2016 at 1:31 AM, Matt Sicker <[email protected]> wrote: >>>>>>> I like it! >>>>>>> >>>>>>>> On 25 January 2016 at 18:23, Ralph Goers <[email protected]> >>>>>>>> wrote: >>>>>>>> Then the method name would be terminate? I could live with that. I >>>>>>>> also like the fact that when something goes wrong with it then it >>>>>>>> would be interminable ;-) >>>>>>>> >>>>>>>> Ralph >>>>>>>> >>>>>>>>> On Jan 25, 2016, at 5:18 PM, Matt Sicker <[email protected]> wrote: >>>>>>>>> >>>>>>>>> How about Terminable? It's even a real word to boot. >>>>>>>>> >>>>>>>>> On 25 January 2016 at 18:15, Ralph Goers <[email protected]> >>>>>>>>> wrote: >>>>>>>>>> Yes, well - Serializable actually sounds like it should be a real >>>>>>>>>> word. Shutdownable doesn’t - in fact, my mail editor just split it >>>>>>>>>> into two words to “help” me. I take a different view. A class that >>>>>>>>>> declares it implements an interface isn’t “capable” of anything - it >>>>>>>>>> just implements the interface. The interface name is what tells you >>>>>>>>>> that the implementing class is able to do something, which is why >>>>>>>>>> you have Comparable instead of just Compare, Cloneable instead of >>>>>>>>>> just Clone, or Closeable instead of just Close. Would you want Stop >>>>>>>>>> instead of Stoppable? I view “able” as just a shorthand way of >>>>>>>>>> saying “Capable”, but unfortunately that just doesn’t sound right >>>>>>>>>> with Shutdown (at least to me). >>>>>>>>>> >>>>>>>>>> Here are some “able” alternatives - presumably each would have a >>>>>>>>>> corresponding method name instead of shutdown: >>>>>>>>>> Terminateable. >>>>>>>>>> Completeable. >>>>>>>>>> Concludeable. >>>>>>>>>> Haltable. >>>>>>>>>> Dismissable. >>>>>>>>>> Expireable. >>>>>>>>>> >>>>>>>>>> I suppose we could also use Stoppable but that seems odd since stop >>>>>>>>>> is part of Lifecycle. >>>>>>>>>> >>>>>>>>>> Got a preference? >>>>>>>>>> >>>>>>>>>> Ralph >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> On Jan 25, 2016, at 4:35 PM, Gary Gregory <[email protected]> >>>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>> I see some interfaces with "*Capable*" in the name here and there >>>>>>>>>>> in the FOSS world (but not in the JRE) so I am a little more >>>>>>>>>>> comfortable with it. >>>>>>>>>>> >>>>>>>>>>> I still see plain old "Shutdown" as simpler. >>>>>>>>>>> >>>>>>>>>>> I think I've boiled down my feel for this name to the fact that the >>>>>>>>>>> Capable postfix is redundant since a class implementing any >>>>>>>>>>> interface is "capable" of that functionality. IOW we have >>>>>>>>>>> Serializable vs. SerializationCabable, which means the same thing. >>>>>>>>>>> >>>>>>>>>>> Gary >>>>>>>>>>> >>>>>>>>>>>> On Mon, Jan 25, 2016 at 7:27 AM, Ralph Goers >>>>>>>>>>>> <[email protected]> wrote: >>>>>>>>>>>> What does it feel weird to you? To be honest, I originally named >>>>>>>>>>>> the interface ‘Shutdown” and then changed it since it really is >>>>>>>>>>>> about implementing a behavior and “Shutdown” alone doesn’t really >>>>>>>>>>>> describe that. >>>>>>>>>>>> >>>>>>>>>>>> Ralph >>>>>>>>>>>> >>>>>>>>>>>>> On Jan 24, 2016, at 11:09 PM, Gary Gregory >>>>>>>>>>>>> <[email protected]> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> On Sun, Jan 24, 2016 at 10:07 PM, Gary Gregory >>>>>>>>>>>>>> <[email protected]> wrote: >>>>>>>>>>>>>>> On Sun, Jan 24, 2016 at 1:54 PM, Ralph Goers >>>>>>>>>>>>>>> <[email protected]> wrote: >>>>>>>>>>>>>>> Yes, Shutdownable is too weird. >>>>>>>>>>>>>> >>>>>>>>>>>>>> How about calling it simply "Shutdown" then? FooCapable feels >>>>>>>>>>>>>> weird to me. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Can anyone think of other (one-method or not) optional >>>>>>>>>>>>>> feature-like interfaces in the JRE or other code base? >>>>>>>>>>>>> >>>>>>>>>>>>> hm... ShutdownService? >>>>>>>>>>>>> >>>>>>>>>>>>> Gary >>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> Gary >>>>>>>>>>>>>> >>>>>>>>>>>>>>> Closeable would imply there is a close method, not a shutdown >>>>>>>>>>>>>>> method. I have my doubts about the try-with-resources use case >>>>>>>>>>>>>>> here. Virtually all usages are probably going to be to disable >>>>>>>>>>>>>>> automatic shutdown and then the user placing the shutdown call >>>>>>>>>>>>>>> somewhere they can control, which probably will have nothing to >>>>>>>>>>>>>>> do with initialization of logging. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Ralph >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> On Jan 24, 2016, at 2:43 PM, Gary Gregory >>>>>>>>>>>>>>>> <[email protected]> wrote: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Resending, got a error from my phone... >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> ---------- Forwarded message ---------- >>>>>>>>>>>>>>>> From: "Gary Gregory" <[email protected]> >>>>>>>>>>>>>>>> Date: Jan 24, 2016 1:41 PM >>>>>>>>>>>>>>>> Subject: Re: logging-log4j2 git commit: LOG4J2-124 - Add >>>>>>>>>>>>>>>> shutdown methods to LogManager >>>>>>>>>>>>>>>> To: <[email protected]> >>>>>>>>>>>>>>>> Cc: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Hi all, >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Any reason not use the usual -able postfix instead of >>>>>>>>>>>>>>>> ShutdownCapable: Shutdownable sounds too weird? What about >>>>>>>>>>>>>>>> reusing plain old Closeable? That means you could use the >>>>>>>>>>>>>>>> context in a try-with-resources block, a bonus. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Gary >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> On Jan 24, 2016 10:18 AM, <[email protected]> wrote: >>>>>>>>>>>>>>>>> Repository: logging-log4j2 >>>>>>>>>>>>>>>>> Updated Branches: >>>>>>>>>>>>>>>>> refs/heads/master 7d3aac4b9 -> 2df3f0e72 >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> LOG4J2-124 - Add shutdown methods to LogManager >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Project: >>>>>>>>>>>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo >>>>>>>>>>>>>>>>> Commit: >>>>>>>>>>>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/2df3f0e7 >>>>>>>>>>>>>>>>> Tree: >>>>>>>>>>>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/2df3f0e7 >>>>>>>>>>>>>>>>> Diff: >>>>>>>>>>>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/2df3f0e7 >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Branch: refs/heads/master >>>>>>>>>>>>>>>>> Commit: 2df3f0e7262c90e3fe1700f053eebf18491650d9 >>>>>>>>>>>>>>>>> Parents: 7d3aac4 >>>>>>>>>>>>>>>>> Author: Ralph Goers <[email protected]> >>>>>>>>>>>>>>>>> Authored: Sun Jan 24 11:18:41 2016 -0700 >>>>>>>>>>>>>>>>> Committer: Ralph Goers <[email protected]> >>>>>>>>>>>>>>>>> Committed: Sun Jan 24 11:18:41 2016 -0700 >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> ---------------------------------------------------------------------- >>>>>>>>>>>>>>>>> .../org/apache/logging/log4j/LogManager.java | 62 >>>>>>>>>>>>>>>>> ++++++++++++++++++++ >>>>>>>>>>>>>>>>> .../logging/log4j/spi/ShutdownCapable.java | 17 ++++++ >>>>>>>>>>>>>>>>> .../apache/logging/log4j/LogManagerTest.java | 7 +++ >>>>>>>>>>>>>>>>> .../logging/log4j/core/LoggerContext.java | 8 ++- >>>>>>>>>>>>>>>>> 4 files changed, 93 insertions(+), 1 deletion(-) >>>>>>>>>>>>>>>>> ---------------------------------------------------------------------- >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2df3f0e7/log4j-api/src/main/java/org/apache/logging/log4j/LogManager.java >>>>>>>>>>>>>>>>> ---------------------------------------------------------------------- >>>>>>>>>>>>>>>>> diff --git >>>>>>>>>>>>>>>>> a/log4j-api/src/main/java/org/apache/logging/log4j/LogManager.java >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/LogManager.java >>>>>>>>>>>>>>>>> index f10e5a8..64c6ee5 100644 >>>>>>>>>>>>>>>>> --- >>>>>>>>>>>>>>>>> a/log4j-api/src/main/java/org/apache/logging/log4j/LogManager.java >>>>>>>>>>>>>>>>> +++ >>>>>>>>>>>>>>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/LogManager.java >>>>>>>>>>>>>>>>> @@ -27,6 +27,7 @@ import >>>>>>>>>>>>>>>>> org.apache.logging.log4j.simple.SimpleLoggerContextFactory; >>>>>>>>>>>>>>>>> import org.apache.logging.log4j.spi.LoggerContext; >>>>>>>>>>>>>>>>> import org.apache.logging.log4j.spi.LoggerContextFactory; >>>>>>>>>>>>>>>>> import org.apache.logging.log4j.spi.Provider; >>>>>>>>>>>>>>>>> +import org.apache.logging.log4j.spi.ShutdownCapable; >>>>>>>>>>>>>>>>> import org.apache.logging.log4j.status.StatusLogger; >>>>>>>>>>>>>>>>> import org.apache.logging.log4j.util.LoaderUtil; >>>>>>>>>>>>>>>>> import org.apache.logging.log4j.util.PropertiesUtil; >>>>>>>>>>>>>>>>> @@ -285,6 +286,67 @@ public class LogManager { >>>>>>>>>>>>>>>>> } >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> /** >>>>>>>>>>>>>>>>> + * Shutdown using the default LoggerContext. >>>>>>>>>>>>>>>>> + * @since 2.6 >>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>> + public static void shutdown() { >>>>>>>>>>>>>>>>> + shutdown(getContext()); >>>>>>>>>>>>>>>>> + } >>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>> + /** >>>>>>>>>>>>>>>>> + * Shutdown the logging system if the logging system >>>>>>>>>>>>>>>>> supports it. >>>>>>>>>>>>>>>>> + * @param currentContext if true the LoggerContext for >>>>>>>>>>>>>>>>> the caller of this method will be used. >>>>>>>>>>>>>>>>> + * @since 2.6 >>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>> + public static void shutdown(boolean currentContext) { >>>>>>>>>>>>>>>>> + shutdown(getContext(currentContext)); >>>>>>>>>>>>>>>>> + } >>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>> + /** >>>>>>>>>>>>>>>>> + * Shutdown the logging system if the logging system >>>>>>>>>>>>>>>>> supports it. >>>>>>>>>>>>>>>>> + * @param loader The ClassLoader for the context. If >>>>>>>>>>>>>>>>> null the context will attempt to determine the appropriate >>>>>>>>>>>>>>>>> + * ClassLoader. >>>>>>>>>>>>>>>>> + * @param currentContext if false the LoggerContext >>>>>>>>>>>>>>>>> appropriate for the caller of this method will be used. >>>>>>>>>>>>>>>>> + * @since 2.6 >>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>> + public static void shutdown(final ClassLoader loader, >>>>>>>>>>>>>>>>> final boolean currentContext) { >>>>>>>>>>>>>>>>> + shutdown(getContext(loader, currentContext)); >>>>>>>>>>>>>>>>> + } >>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>> + /** >>>>>>>>>>>>>>>>> + * Shutdown the logging system if the logging system >>>>>>>>>>>>>>>>> supports it. >>>>>>>>>>>>>>>>> + * @param context the LoggerContext. >>>>>>>>>>>>>>>>> + * @since 2.6 >>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>> + public static void shutdown(LoggerContext context) { >>>>>>>>>>>>>>>>> + if (context != null && context instanceof >>>>>>>>>>>>>>>>> ShutdownCapable) { >>>>>>>>>>>>>>>>> + ((ShutdownCapable) context).shutdown(); >>>>>>>>>>>>>>>>> + } >>>>>>>>>>>>>>>>> + } >>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>> + /** >>>>>>>>>>>>>>>>> + * Shutdown the logging system if the logging system >>>>>>>>>>>>>>>>> supports it. >>>>>>>>>>>>>>>>> + * @param fqcn The fully qualified class name of the >>>>>>>>>>>>>>>>> Class that this method is a member of. >>>>>>>>>>>>>>>>> + * @param currentContext if false the LoggerContext >>>>>>>>>>>>>>>>> appropriate for the caller of this method will be used. >>>>>>>>>>>>>>>>> + * @since 2.6 >>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>> + protected static void shutdown(final String fqcn, final >>>>>>>>>>>>>>>>> boolean currentContext) { >>>>>>>>>>>>>>>>> + shutdown(getContext(fqcn, currentContext)); >>>>>>>>>>>>>>>>> + } >>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>> + /** >>>>>>>>>>>>>>>>> + * Shutdown the logging system if the logging system >>>>>>>>>>>>>>>>> supports it. >>>>>>>>>>>>>>>>> + * @param fqcn The fully qualified class name of the >>>>>>>>>>>>>>>>> Class that this method is a member of. >>>>>>>>>>>>>>>>> + * @param loader The ClassLoader for the context. If >>>>>>>>>>>>>>>>> null the context will attempt to determine the appropriate >>>>>>>>>>>>>>>>> + * ClassLoader. >>>>>>>>>>>>>>>>> + * @param currentContext if false the LoggerContext >>>>>>>>>>>>>>>>> appropriate for the caller of this method will be used. >>>>>>>>>>>>>>>>> + * @since 2.6 >>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>> + protected static void shutdown(final String fqcn, final >>>>>>>>>>>>>>>>> ClassLoader loader, final boolean currentContext) { >>>>>>>>>>>>>>>>> + shutdown(getContext(fqcn, loader, currentContext)); >>>>>>>>>>>>>>>>> + } >>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>> + /** >>>>>>>>>>>>>>>>> * Returns the current LoggerContextFactory. >>>>>>>>>>>>>>>>> * >>>>>>>>>>>>>>>>> * @return The LoggerContextFactory. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2df3f0e7/log4j-api/src/main/java/org/apache/logging/log4j/spi/ShutdownCapable.java >>>>>>>>>>>>>>>>> ---------------------------------------------------------------------- >>>>>>>>>>>>>>>>> diff --git >>>>>>>>>>>>>>>>> a/log4j-api/src/main/java/org/apache/logging/log4j/spi/ShutdownCapable.java >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/spi/ShutdownCapable.java >>>>>>>>>>>>>>>>> new file mode 100644 >>>>>>>>>>>>>>>>> index 0000000..a46ef60 >>>>>>>>>>>>>>>>> --- /dev/null >>>>>>>>>>>>>>>>> +++ >>>>>>>>>>>>>>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/spi/ShutdownCapable.java >>>>>>>>>>>>>>>>> @@ -0,0 +1,17 @@ >>>>>>>>>>>>>>>>> +/* >>>>>>>>>>>>>>>>> + * Copyright (c) 2016 Nextiva, Inc. to Present. >>>>>>>>>>>>>>>>> + * All rights reserved. >>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>> +package org.apache.logging.log4j.spi; >>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>> +/** >>>>>>>>>>>>>>>>> + * Interface to be implemented by LoggerContext's that >>>>>>>>>>>>>>>>> provide a shutdown method. >>>>>>>>>>>>>>>>> + * @since 2.6 >>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>> +public interface ShutdownCapable { >>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>> + /** >>>>>>>>>>>>>>>>> + * Requests that the logging implementation shut down. >>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>> + void shutdown(); >>>>>>>>>>>>>>>>> +} >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2df3f0e7/log4j-api/src/test/java/org/apache/logging/log4j/LogManagerTest.java >>>>>>>>>>>>>>>>> ---------------------------------------------------------------------- >>>>>>>>>>>>>>>>> diff --git >>>>>>>>>>>>>>>>> a/log4j-api/src/test/java/org/apache/logging/log4j/LogManagerTest.java >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> b/log4j-api/src/test/java/org/apache/logging/log4j/LogManagerTest.java >>>>>>>>>>>>>>>>> index 48f0eea..596a9f2 100644 >>>>>>>>>>>>>>>>> --- >>>>>>>>>>>>>>>>> a/log4j-api/src/test/java/org/apache/logging/log4j/LogManagerTest.java >>>>>>>>>>>>>>>>> +++ >>>>>>>>>>>>>>>>> b/log4j-api/src/test/java/org/apache/logging/log4j/LogManagerTest.java >>>>>>>>>>>>>>>>> @@ -17,6 +17,7 @@ >>>>>>>>>>>>>>>>> package org.apache.logging.log4j; >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> import >>>>>>>>>>>>>>>>> org.apache.logging.log4j.message.ParameterizedMessageFactory; >>>>>>>>>>>>>>>>> +import org.apache.logging.log4j.spi.LoggerContext; >>>>>>>>>>>>>>>>> import org.junit.Test; >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> import static org.junit.Assert.*; >>>>>>>>>>>>>>>>> @@ -53,4 +54,10 @@ public class LogManagerTest { >>>>>>>>>>>>>>>>> assertNotNull("No Logger returned", logger); >>>>>>>>>>>>>>>>> assertTrue("Incorrect Logger name: " + >>>>>>>>>>>>>>>>> logger.getName(),LogManagerTest.class.getName().equals(logger.getName())); >>>>>>>>>>>>>>>>> } >>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>> + @Test >>>>>>>>>>>>>>>>> + public void testShutdown() { >>>>>>>>>>>>>>>>> + LoggerContext loggerContext = >>>>>>>>>>>>>>>>> LogManager.getContext(false); >>>>>>>>>>>>>>>>> + LogManager.shutdown(loggerContext); >>>>>>>>>>>>>>>>> + } >>>>>>>>>>>>>>>>> } >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2df3f0e7/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java >>>>>>>>>>>>>>>>> ---------------------------------------------------------------------- >>>>>>>>>>>>>>>>> diff --git >>>>>>>>>>>>>>>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java >>>>>>>>>>>>>>>>> index 42efbb5..fcdfc16 100644 >>>>>>>>>>>>>>>>> --- >>>>>>>>>>>>>>>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java >>>>>>>>>>>>>>>>> +++ >>>>>>>>>>>>>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java >>>>>>>>>>>>>>>>> @@ -45,6 +45,7 @@ import >>>>>>>>>>>>>>>>> org.apache.logging.log4j.message.MessageFactory; >>>>>>>>>>>>>>>>> import org.apache.logging.log4j.spi.AbstractLogger; >>>>>>>>>>>>>>>>> import org.apache.logging.log4j.spi.LoggerContextFactory; >>>>>>>>>>>>>>>>> import org.apache.logging.log4j.spi.LoggerContextKey; >>>>>>>>>>>>>>>>> +import org.apache.logging.log4j.spi.ShutdownCapable; >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> import static >>>>>>>>>>>>>>>>> org.apache.logging.log4j.core.util.ShutdownCallbackRegistry.*; >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> @@ -54,7 +55,7 @@ import static >>>>>>>>>>>>>>>>> org.apache.logging.log4j.core.util.ShutdownCallbackRegistry.*; >>>>>>>>>>>>>>>>> * filters, etc and will be atomically updated whenever a >>>>>>>>>>>>>>>>> reconfigure occurs. >>>>>>>>>>>>>>>>> */ >>>>>>>>>>>>>>>>> public class LoggerContext extends AbstractLifeCycle >>>>>>>>>>>>>>>>> implements org.apache.logging.log4j.spi.LoggerContext, >>>>>>>>>>>>>>>>> - ConfigurationListener { >>>>>>>>>>>>>>>>> + ShutdownCapable, ConfigurationListener { >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> /** >>>>>>>>>>>>>>>>> * Property name of the property change event fired if >>>>>>>>>>>>>>>>> the configuration is changed. >>>>>>>>>>>>>>>>> @@ -278,6 +279,11 @@ public class LoggerContext extends >>>>>>>>>>>>>>>>> AbstractLifeCycle implements org.apache.loggi >>>>>>>>>>>>>>>>> } >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> @Override >>>>>>>>>>>>>>>>> + public void shutdown() { >>>>>>>>>>>>>>>>> + stop(); >>>>>>>>>>>>>>>>> + } >>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>> + @Override >>>>>>>>>>>>>>>>> public void stop() { >>>>>>>>>>>>>>>>> LOGGER.debug("Stopping LoggerContext[name={}, >>>>>>>>>>>>>>>>> {}]...", getName(), this); >>>>>>>>>>>>>>>>> configLock.lock(); >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> -- >>>>>>>>>>>>>> E-Mail: [email protected] | [email protected] >>>>>>>>>>>>>> Java Persistence with Hibernate, Second Edition >>>>>>>>>>>>>> JUnit in Action, Second Edition >>>>>>>>>>>>>> Spring Batch in Action >>>>>>>>>>>>>> Blog: http://garygregory.wordpress.com >>>>>>>>>>>>>> Home: http://garygregory.com/ >>>>>>>>>>>>>> Tweet! http://twitter.com/GaryGregory >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> -- >>>>>>>>>>>>> E-Mail: [email protected] | [email protected] >>>>>>>>>>>>> Java Persistence with Hibernate, Second Edition >>>>>>>>>>>>> JUnit in Action, Second Edition >>>>>>>>>>>>> Spring Batch in Action >>>>>>>>>>>>> Blog: http://garygregory.wordpress.com >>>>>>>>>>>>> Home: http://garygregory.com/ >>>>>>>>>>>>> Tweet! http://twitter.com/GaryGregory >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> E-Mail: [email protected] | [email protected] >>>>>>>>>>> Java Persistence with Hibernate, Second Edition >>>>>>>>>>> JUnit in Action, Second Edition >>>>>>>>>>> Spring Batch in Action >>>>>>>>>>> Blog: http://garygregory.wordpress.com >>>>>>>>>>> Home: http://garygregory.com/ >>>>>>>>>>> Tweet! http://twitter.com/GaryGregory >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Matt Sicker <[email protected]> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Matt Sicker <[email protected]> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> >>>>>> >>>>>> Mikael Ståldal >>>>>> Senior software developer >>>>>> >>>>>> Magine TV >>>>>> [email protected] >>>>>> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com >>>>>> >>>>>> Privileged and/or Confidential Information may be contained in this >>>>>> message. If you are not the addressee indicated in this message >>>>>> (or responsible for delivery of the message to such a person), you may >>>>>> not copy or deliver this message to anyone. In such case, >>>>>> you should destroy this message and kindly notify the sender by reply >>>>>> email. >>> >>> >>> >>> -- >>> >>> >>> Mikael Ståldal >>> Senior software developer >>> >>> Magine TV >>> [email protected] >>> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com >>> >>> Privileged and/or Confidential Information may be contained in this >>> message. If you are not the addressee indicated in this message >>> (or responsible for delivery of the message to such a person), you may not >>> copy or deliver this message to anyone. In such case, >>> you should destroy this message and kindly notify the sender by reply >>> email. > > > > -- > > > Mikael Ståldal > Senior software developer > > Magine TV > [email protected] > Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com > > Privileged and/or Confidential Information may be contained in this message. > If you are not the addressee indicated in this message > (or responsible for delivery of the message to such a person), you may not > copy or deliver this message to anyone. In such case, > you should destroy this message and kindly notify the sender by reply email. >
