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.  
>  

Reply via email to