You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by Jason van Zyl <ja...@tesla.io> on 2013/03/16 14:58:47 UTC

Logger and Embedded Maven Core ITs

Hervé,

Can you take a look at the logging changes you made to try and use the SLF4J package private method for resetting the logger? The streams are being reset correctly but the logging level doesn't appear to be reset which causes the embedded ITs to fail.

Thanks,

Jason

----------------------------------------------------------
Jason van Zyl
Founder & CTO, Sonatype
Founder,  Apache Maven
http://twitter.com/jvanzyl
---------------------------------------------------------

People develop abstractions by generalizing from concrete examples.
Every attempt to determine the correct abstraction on paper without
actually developing a running system is doomed to failure. No one
is that smart. A framework is a resuable design, so you develop it by
looking at the things it is supposed to be a design of. The more examples
you look at, the more general your framework will be.

  -- Ralph Johnson & Don Roberts, Patterns for Evolving Frameworks 






Re: Logger and Embedded Maven Core ITs

Posted by Jason van Zyl <ja...@tesla.io>.
Thanks Ceki, the change  you made works.

On Mar 17, 2013, at 1:10 PM, ceki <ce...@qos.ch> wrote:

> 
> 
> On 17.03.2013 00:47, Jason van Zyl wrote:
>> If that's the case Ceki might be able to add the clearing of the logger map to the reset method.
>> 
>> Ceki, would this be hard to change?
> 
> I just added a reset method to SimpleLoggerFactory. See https://github.com/qos-ch/slf4j/commit/6dd3a60ee77a5cd17e for the commit.  Here is sample code for invoking this method in Maven tests:
> 
> import org.slf4j.ILoggerFactory;
> import org.slf4j.LoggerFactory;
> 
>  ILoggerFactory iLoggerFactory = LoggerFactory.getILoggerFactory();
>  if(iLoggerFactory instanceof SimpleLoggerFactory) {
>    ((SimpleLoggerFactory) iLoggerFactory).reset();
>  }
> 
> As the reset() method is package protected, it needs to be invoked from code in the org.slf4j.impl package. A "friend" class could expose the reset method to classes in other packages.
> 
> Anyway, let me know how if this works for you.
> 
>> On Mar 16, 2013, at 4:38 PM, Stuart McCulloch <mc...@gmail.com> wrote:
>> 
>>> On 16 Mar 2013, at 13:58, Jason van Zyl wrote:
>>> 
>>>> Hervé,
>>>> 
>>>> Can you take a look at the logging changes you made to try and use the SLF4J package private method for resetting the logger? The streams are being reset correctly but the logging level doesn't appear to be reset which causes the embedded ITs to fail.
>>> 
>>> Did some investigating and the issue seems to be that SLF4J Simple uses a static singleton logger factory which contains a map of cached loggers.
>>> 
>>> Because embedded test mode uses the same classloader for all the tests (it only forks once at the start) each test therefore sees the same logger factory and any previously cached loggers.
>>> 
>>> This means that although the MavenCLI successfully resets SLF4J to refresh the log level, the new setting doesn't affect previously cached loggers (they only pick up the level in their constructor).
>>> 
>>> This can be shown with the following hack to clear the logger map (not sane code, just proof-of-concept) which solves the embedded logging IT failures:
>>> 
>>> diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java b/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java
>>> index 6a7f385..f1af143 100644
>>> --- a/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java
>>> +++ b/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java
>>> @@ -58,5 +58,20 @@ public void activate()
>>>         // property for root logger level or System.out redirection need to be taken into account
>>>         MavenSlf4jFriend.reset();
>>>         MavenSlf4jSimpleFriend.init();
>>> +
>>> +        try
>>> +        {
>>> +             org.slf4j.ILoggerFactory loggerFactory = org.slf4j.LoggerFactory.getILoggerFactory();
>>> +             synchronized ( loggerFactory )
>>> +             {
>>> +                 java.lang.reflect.Field loggerMap = loggerFactory.getClass().getDeclaredField( "loggerMap" );
>>> +                 loggerMap.setAccessible( true );
>>> +                 ( (java.util.Map) loggerMap.get( loggerFactory ) ).clear();
>>> +             }
>>> +        }
>>> +        catch ( Exception e )
>>> +        {
>>> +            // ignore for now...
>>> +        }
>>>     }
>>> }
>>> 
>>>> Thanks,
>>>> 
>>>> Jason
>>>> 
>>>> ----------------------------------------------------------
>>>> Jason van Zyl
>>>> Founder & CTO, Sonatype
>>>> Founder,  Apache Maven
>>>> http://twitter.com/jvanzyl
>>>> ---------------------------------------------------------
>>>> 
>>>> People develop abstractions by generalizing from concrete examples.
>>>> Every attempt to determine the correct abstraction on paper without
>>>> actually developing a running system is doomed to failure. No one
>>>> is that smart. A framework is a resuable design, so you develop it by
>>>> looking at the things it is supposed to be a design of. The more examples
>>>> you look at, the more general your framework will be.
>>>> 
>>>> -- Ralph Johnson & Don Roberts, Patterns for Evolving Frameworks
>>> 
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
>>> For additional commands, e-mail: dev-help@maven.apache.org
>>> 
>> 
>> Thanks,
>> 
>> Jason
> 
> --
> Ceki
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
> For additional commands, e-mail: dev-help@maven.apache.org
> 

Thanks,

Jason

----------------------------------------------------------
Jason van Zyl
Founder & CTO, Sonatype
Founder,  Apache Maven
http://twitter.com/jvanzyl
---------------------------------------------------------

the course of true love never did run smooth ...

 -- Shakespeare






Re: Logger and Embedded Maven Core ITs

Posted by Jason van Zyl <ja...@tesla.io>.
Thanks! We can try it with the helper we currently have.

jvz

On 2013-03-17, at 1:10 PM, ceki <ce...@qos.ch> wrote:

> 
> 
> On 17.03.2013 00:47, Jason van Zyl wrote:
>> If that's the case Ceki might be able to add the clearing of the logger map to the reset method.
>> 
>> Ceki, would this be hard to change?
> 
> I just added a reset method to SimpleLoggerFactory. See https://github.com/qos-ch/slf4j/commit/6dd3a60ee77a5cd17e for the commit.  Here is sample code for invoking this method in Maven tests:
> 
> import org.slf4j.ILoggerFactory;
> import org.slf4j.LoggerFactory;
> 
>  ILoggerFactory iLoggerFactory = LoggerFactory.getILoggerFactory();
>  if(iLoggerFactory instanceof SimpleLoggerFactory) {
>    ((SimpleLoggerFactory) iLoggerFactory).reset();
>  }
> 
> As the reset() method is package protected, it needs to be invoked from code in the org.slf4j.impl package. A "friend" class could expose the reset method to classes in other packages.
> 
> Anyway, let me know how if this works for you.
> 
>> On Mar 16, 2013, at 4:38 PM, Stuart McCulloch <mc...@gmail.com> wrote:
>> 
>>> On 16 Mar 2013, at 13:58, Jason van Zyl wrote:
>>> 
>>>> Hervé,
>>>> 
>>>> Can you take a look at the logging changes you made to try and use the SLF4J package private method for resetting the logger? The streams are being reset correctly but the logging level doesn't appear to be reset which causes the embedded ITs to fail.
>>> 
>>> Did some investigating and the issue seems to be that SLF4J Simple uses a static singleton logger factory which contains a map of cached loggers.
>>> 
>>> Because embedded test mode uses the same classloader for all the tests (it only forks once at the start) each test therefore sees the same logger factory and any previously cached loggers.
>>> 
>>> This means that although the MavenCLI successfully resets SLF4J to refresh the log level, the new setting doesn't affect previously cached loggers (they only pick up the level in their constructor).
>>> 
>>> This can be shown with the following hack to clear the logger map (not sane code, just proof-of-concept) which solves the embedded logging IT failures:
>>> 
>>> diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java b/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java
>>> index 6a7f385..f1af143 100644
>>> --- a/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java
>>> +++ b/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java
>>> @@ -58,5 +58,20 @@ public void activate()
>>>         // property for root logger level or System.out redirection need to be taken into account
>>>         MavenSlf4jFriend.reset();
>>>         MavenSlf4jSimpleFriend.init();
>>> +
>>> +        try
>>> +        {
>>> +             org.slf4j.ILoggerFactory loggerFactory = org.slf4j.LoggerFactory.getILoggerFactory();
>>> +             synchronized ( loggerFactory )
>>> +             {
>>> +                 java.lang.reflect.Field loggerMap = loggerFactory.getClass().getDeclaredField( "loggerMap" );
>>> +                 loggerMap.setAccessible( true );
>>> +                 ( (java.util.Map) loggerMap.get( loggerFactory ) ).clear();
>>> +             }
>>> +        }
>>> +        catch ( Exception e )
>>> +        {
>>> +            // ignore for now...
>>> +        }
>>>     }
>>> }
>>> 
>>>> Thanks,
>>>> 
>>>> Jason
>>>> 
>>>> ----------------------------------------------------------
>>>> Jason van Zyl
>>>> Founder & CTO, Sonatype
>>>> Founder,  Apache Maven
>>>> http://twitter.com/jvanzyl
>>>> ---------------------------------------------------------
>>>> 
>>>> People develop abstractions by generalizing from concrete examples.
>>>> Every attempt to determine the correct abstraction on paper without
>>>> actually developing a running system is doomed to failure. No one
>>>> is that smart. A framework is a resuable design, so you develop it by
>>>> looking at the things it is supposed to be a design of. The more examples
>>>> you look at, the more general your framework will be.
>>>> 
>>>> -- Ralph Johnson & Don Roberts, Patterns for Evolving Frameworks
>>> 
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
>>> For additional commands, e-mail: dev-help@maven.apache.org
>> 
>> Thanks,
>> 
>> Jason
> 
> --
> Ceki
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
> For additional commands, e-mail: dev-help@maven.apache.org
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org


Re: Logger and Embedded Maven Core ITs

Posted by ceki <ce...@qos.ch>.

On 17.03.2013 00:47, Jason van Zyl wrote:
> If that's the case Ceki might be able to add the clearing of the logger map to the reset method.
>
> Ceki, would this be hard to change?

I just added a reset method to SimpleLoggerFactory. See 
https://github.com/qos-ch/slf4j/commit/6dd3a60ee77a5cd17e for the 
commit.  Here is sample code for invoking this method in Maven tests:

import org.slf4j.ILoggerFactory;
import org.slf4j.LoggerFactory;

   ILoggerFactory iLoggerFactory = LoggerFactory.getILoggerFactory();
   if(iLoggerFactory instanceof SimpleLoggerFactory) {
     ((SimpleLoggerFactory) iLoggerFactory).reset();
   }

As the reset() method is package protected, it needs to be invoked from 
code in the org.slf4j.impl package. A "friend" class could expose the 
reset method to classes in other packages.

Anyway, let me know how if this works for you.

> On Mar 16, 2013, at 4:38 PM, Stuart McCulloch <mc...@gmail.com> wrote:
>
>> On 16 Mar 2013, at 13:58, Jason van Zyl wrote:
>>
>>> Hervé,
>>>
>>> Can you take a look at the logging changes you made to try and use the SLF4J package private method for resetting the logger? The streams are being reset correctly but the logging level doesn't appear to be reset which causes the embedded ITs to fail.
>>
>> Did some investigating and the issue seems to be that SLF4J Simple uses a static singleton logger factory which contains a map of cached loggers.
>>
>> Because embedded test mode uses the same classloader for all the tests (it only forks once at the start) each test therefore sees the same logger factory and any previously cached loggers.
>>
>> This means that although the MavenCLI successfully resets SLF4J to refresh the log level, the new setting doesn't affect previously cached loggers (they only pick up the level in their constructor).
>>
>> This can be shown with the following hack to clear the logger map (not sane code, just proof-of-concept) which solves the embedded logging IT failures:
>>
>> diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java b/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java
>> index 6a7f385..f1af143 100644
>> --- a/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java
>> +++ b/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java
>> @@ -58,5 +58,20 @@ public void activate()
>>          // property for root logger level or System.out redirection need to be taken into account
>>          MavenSlf4jFriend.reset();
>>          MavenSlf4jSimpleFriend.init();
>> +
>> +        try
>> +        {
>> +             org.slf4j.ILoggerFactory loggerFactory = org.slf4j.LoggerFactory.getILoggerFactory();
>> +             synchronized ( loggerFactory )
>> +             {
>> +                 java.lang.reflect.Field loggerMap = loggerFactory.getClass().getDeclaredField( "loggerMap" );
>> +                 loggerMap.setAccessible( true );
>> +                 ( (java.util.Map) loggerMap.get( loggerFactory ) ).clear();
>> +             }
>> +        }
>> +        catch ( Exception e )
>> +        {
>> +            // ignore for now...
>> +        }
>>      }
>> }
>>
>>> Thanks,
>>>
>>> Jason
>>>
>>> ----------------------------------------------------------
>>> Jason van Zyl
>>> Founder & CTO, Sonatype
>>> Founder,  Apache Maven
>>> http://twitter.com/jvanzyl
>>> ---------------------------------------------------------
>>>
>>> People develop abstractions by generalizing from concrete examples.
>>> Every attempt to determine the correct abstraction on paper without
>>> actually developing a running system is doomed to failure. No one
>>> is that smart. A framework is a resuable design, so you develop it by
>>> looking at the things it is supposed to be a design of. The more examples
>>> you look at, the more general your framework will be.
>>>
>>> -- Ralph Johnson & Don Roberts, Patterns for Evolving Frameworks
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
>> For additional commands, e-mail: dev-help@maven.apache.org
>>
>
> Thanks,
>
> Jason

--
Ceki



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org


Re: Logger and Embedded Maven Core ITs

Posted by Jason van Zyl <ja...@tesla.io>.
If that's the case Ceki might be able to add the clearing of the logger map to the reset method. 

Ceki, would this be hard to change?

On Mar 16, 2013, at 4:38 PM, Stuart McCulloch <mc...@gmail.com> wrote:

> On 16 Mar 2013, at 13:58, Jason van Zyl wrote:
> 
>> Hervé,
>> 
>> Can you take a look at the logging changes you made to try and use the SLF4J package private method for resetting the logger? The streams are being reset correctly but the logging level doesn't appear to be reset which causes the embedded ITs to fail.
> 
> Did some investigating and the issue seems to be that SLF4J Simple uses a static singleton logger factory which contains a map of cached loggers.
> 
> Because embedded test mode uses the same classloader for all the tests (it only forks once at the start) each test therefore sees the same logger factory and any previously cached loggers.
> 
> This means that although the MavenCLI successfully resets SLF4J to refresh the log level, the new setting doesn't affect previously cached loggers (they only pick up the level in their constructor).
> 
> This can be shown with the following hack to clear the logger map (not sane code, just proof-of-concept) which solves the embedded logging IT failures:
> 
> diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java b/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java
> index 6a7f385..f1af143 100644
> --- a/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java
> +++ b/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java
> @@ -58,5 +58,20 @@ public void activate()
>         // property for root logger level or System.out redirection need to be taken into account
>         MavenSlf4jFriend.reset();
>         MavenSlf4jSimpleFriend.init();
> +
> +        try
> +        {
> +             org.slf4j.ILoggerFactory loggerFactory = org.slf4j.LoggerFactory.getILoggerFactory();
> +             synchronized ( loggerFactory )
> +             {
> +                 java.lang.reflect.Field loggerMap = loggerFactory.getClass().getDeclaredField( "loggerMap" );
> +                 loggerMap.setAccessible( true );
> +                 ( (java.util.Map) loggerMap.get( loggerFactory ) ).clear();
> +             }
> +        }
> +        catch ( Exception e )
> +        {
> +            // ignore for now...
> +        }
>     }
> }
> 
>> Thanks,
>> 
>> Jason
>> 
>> ----------------------------------------------------------
>> Jason van Zyl
>> Founder & CTO, Sonatype
>> Founder,  Apache Maven
>> http://twitter.com/jvanzyl
>> ---------------------------------------------------------
>> 
>> People develop abstractions by generalizing from concrete examples.
>> Every attempt to determine the correct abstraction on paper without
>> actually developing a running system is doomed to failure. No one
>> is that smart. A framework is a resuable design, so you develop it by
>> looking at the things it is supposed to be a design of. The more examples
>> you look at, the more general your framework will be.
>> 
>> -- Ralph Johnson & Don Roberts, Patterns for Evolving Frameworks 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
> For additional commands, e-mail: dev-help@maven.apache.org
> 

Thanks,

Jason

----------------------------------------------------------
Jason van Zyl
Founder & CTO, Sonatype
Founder,  Apache Maven
http://twitter.com/jvanzyl
---------------------------------------------------------

A language that doesn’t affect the way you think about programming is not worth knowing. 
 
 -- Alan Perlis






Re: Logger and Embedded Maven Core ITs

Posted by Stuart McCulloch <mc...@gmail.com>.
On 16 Mar 2013, at 23:38, Stuart McCulloch wrote:

> On 16 Mar 2013, at 13:58, Jason van Zyl wrote:
> 
>> Hervé,
>> 
>> Can you take a look at the logging changes you made to try and use the SLF4J package private method for resetting the logger? The streams are being reset correctly but the logging level doesn't appear to be reset which causes the embedded ITs to fail.
> 
> Did some investigating and the issue seems to be that SLF4J Simple uses a static singleton logger factory which contains a map of cached loggers.
> 
> Because embedded test mode uses the same classloader for all the tests (it only forks once at the start) each test therefore sees the same logger factory and any previously cached loggers.

^ minor clarification, the classloader here is the one created by maven-verifier around the maven installation to-be-tested in embedded mode and not the surefire isolated classloader

> This means that although the MavenCLI successfully resets SLF4J to refresh the log level, the new setting doesn't affect previously cached loggers (they only pick up the level in their constructor).
> 
> This can be shown with the following hack to clear the logger map (not sane code, just proof-of-concept) which solves the embedded logging IT failures:
> 
> diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java b/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java
> index 6a7f385..f1af143 100644
> --- a/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java
> +++ b/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java
> @@ -58,5 +58,20 @@ public void activate()
>         // property for root logger level or System.out redirection need to be taken into account
>         MavenSlf4jFriend.reset();
>         MavenSlf4jSimpleFriend.init();
> +
> +        try
> +        {
> +             org.slf4j.ILoggerFactory loggerFactory = org.slf4j.LoggerFactory.getILoggerFactory();
> +             synchronized ( loggerFactory )
> +             {
> +                 java.lang.reflect.Field loggerMap = loggerFactory.getClass().getDeclaredField( "loggerMap" );
> +                 loggerMap.setAccessible( true );
> +                 ( (java.util.Map) loggerMap.get( loggerFactory ) ).clear();
> +             }
> +        }
> +        catch ( Exception e )
> +        {
> +            // ignore for now...
> +        }
>     }
> }
> 
>> Thanks,
>> 
>> Jason
>> 
>> ----------------------------------------------------------
>> Jason van Zyl
>> Founder & CTO, Sonatype
>> Founder,  Apache Maven
>> http://twitter.com/jvanzyl
>> ---------------------------------------------------------
>> 
>> People develop abstractions by generalizing from concrete examples.
>> Every attempt to determine the correct abstraction on paper without
>> actually developing a running system is doomed to failure. No one
>> is that smart. A framework is a resuable design, so you develop it by
>> looking at the things it is supposed to be a design of. The more examples
>> you look at, the more general your framework will be.
>> 
>> -- Ralph Johnson & Don Roberts, Patterns for Evolving Frameworks 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org


Re: Logger and Embedded Maven Core ITs

Posted by Stuart McCulloch <mc...@gmail.com>.
On 16 Mar 2013, at 13:58, Jason van Zyl wrote:

> Hervé,
> 
> Can you take a look at the logging changes you made to try and use the SLF4J package private method for resetting the logger? The streams are being reset correctly but the logging level doesn't appear to be reset which causes the embedded ITs to fail.

Did some investigating and the issue seems to be that SLF4J Simple uses a static singleton logger factory which contains a map of cached loggers.

Because embedded test mode uses the same classloader for all the tests (it only forks once at the start) each test therefore sees the same logger factory and any previously cached loggers.

This means that although the MavenCLI successfully resets SLF4J to refresh the log level, the new setting doesn't affect previously cached loggers (they only pick up the level in their constructor).

This can be shown with the following hack to clear the logger map (not sane code, just proof-of-concept) which solves the embedded logging IT failures:

diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java b/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java
index 6a7f385..f1af143 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java
@@ -58,5 +58,20 @@ public void activate()
         // property for root logger level or System.out redirection need to be taken into account
         MavenSlf4jFriend.reset();
         MavenSlf4jSimpleFriend.init();
+
+        try
+        {
+             org.slf4j.ILoggerFactory loggerFactory = org.slf4j.LoggerFactory.getILoggerFactory();
+             synchronized ( loggerFactory )
+             {
+                 java.lang.reflect.Field loggerMap = loggerFactory.getClass().getDeclaredField( "loggerMap" );
+                 loggerMap.setAccessible( true );
+                 ( (java.util.Map) loggerMap.get( loggerFactory ) ).clear();
+             }
+        }
+        catch ( Exception e )
+        {
+            // ignore for now...
+        }
     }
 }

> Thanks,
> 
> Jason
> 
> ----------------------------------------------------------
> Jason van Zyl
> Founder & CTO, Sonatype
> Founder,  Apache Maven
> http://twitter.com/jvanzyl
> ---------------------------------------------------------
> 
> People develop abstractions by generalizing from concrete examples.
> Every attempt to determine the correct abstraction on paper without
> actually developing a running system is doomed to failure. No one
> is that smart. A framework is a resuable design, so you develop it by
> looking at the things it is supposed to be a design of. The more examples
> you look at, the more general your framework will be.
> 
>  -- Ralph Johnson & Don Roberts, Patterns for Evolving Frameworks 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org