[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [equinox-dev] Commons logging madness
|
Bitter is a good word ;)
Yea, I'm pretty much stuck with JCL as that's what Spring uses and I'm
desperately trying to figure out why the latest change to the Spring/OSGi is
making every bit of functional testing I have silently fail. So, I'm
looking at a holiday debugging fest with my eyes gouged out.
Thanks, though, for all the suggestions...
On 12/21/06 3:40 AM, "Neil Bartlett" <njbartlett@xxxxxxxxx> wrote:
> Hal,
>
> Jakarta Commons Logging (JCL) tries to be clever about classloading. In
> the words of Spinal Tap "there is a fine line between clever and stupid".
>
> JCL makes a number of old-fashioned assumptions about class loading in
> order to dynamically discover a logging library to use. Heaven only knows
> why this can't be done with static linking or runtime configuration.
> Anyway those class loading assumptions are hairy in application servers
> and plain wrong in OSGi. Its use should be heavily discouraged.
>
> SLF4J does provide a statically linked drop-in replacement for JCL, but
> frankly it would be much nicer if Spring factored out its dependency on
> the JCL API.
>
> - Neil
>
> PS: if I sound bitter, I am. I lost days to debugging these problems. I
> shudder to think of the total worldwide productivity that has been
> destroyed by JCL.
>
>
>
>> Cross posting this on the equinox dev and Spring/OSGi lists.
>>
>> I'm desperately trying to get logging to work in the Spring/OSGi testing
>> environment as I simply have no hair left - having pulled it out from
>> frustration. Those who know me will understand that this is a lot of
>> hair.
>>
>> So, in desperation, I finally turned on the commons logging diagnostic
>> information so I can see something - anything - that will tell me what the
>> heck is going on. Attached is the trace running under Equinox 3.2.1 and
>> from running under Knopflerfish 2.0.1.
>>
>> The same loaded bundle configuration is used for both runs. In the KF
>> case,
>> the log4J implementation is discovered and used as expected. In the
>> Equinox
>> case, the Log4J configuration fails because of which results in commons
>> logging using the JDK logging implementation.
>>
>> The problem appears to be multiple versions of
>> org.apache.commons.logging.Log which causes as one might expect a
>> class
>> mismatch problem.
>>
>> In both the KF and Equinox case, I have set the OSGi System property
>> ³org.osgi.framework.bootdelegation² to
>> ³javax.*,org.w3c.*,sun.*,org.xml.*,com.sun.*². So, I¹m not sure what¹s
>> happening. I¹m stumped as to what¹s going on.
>>
>> Below are the relevant sections of trace output in the Equinox case
>> (there¹s
>> a lot of output, sorry).
>>
>> Any help would be appreciated in tracking this down...
>>
>>
>> [LogFactoryImpl@15479518 from
>> org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@4999881]
>> [WARNING]
>> the context classloader is not part of a parent-child relationship with
>> the
>> classloader that loaded LogFactoryImpl.
>> [LogFactoryImpl@15479518 from
>> org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@4999881] Trying
>> to
>> load 'org.apache.commons.logging.impl.Log4JLogger' from classloader
>> org.eclipse.core.runtime.internal.adaptor.ContextFinder@667901
>> [LogFactoryImpl@15479518 from
>> org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@4999881] Class
>> 'org.apache.commons.logging.impl.Log4JLogger' was found at
>> 'jar:file:/Users/hhildebrand/.m2/repository/org/springframework/osgi/commons
>> -logging.osgi/1.1-SNAPSHOT/commons-logging.osgi-1.1-SNAPSHOT.jar!/org/apache
>> /commons/logging/impl/Log4JLogger.class'
>> [LogFactoryImpl@15479518 from
>> org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@4999881] The log
>> adapter 'org.apache.commons.logging.impl.Log4JLogger' is missing
>> dependencies when loaded via classloader
>> org.eclipse.core.runtime.internal.adaptor.ContextFinder@667901:
>> org/apache/log4j/Category
>> [LogFactoryImpl@15479518 from
>> org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@4999881]
>> Attempting
>> to instantiate 'org.apache.commons.logging.impl.Jdk14Logger'
>> [LogFactoryImpl@15479518 from
>> org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@4999881]
>> [WARNING]
>> the context classloader is not part of a parent-child relationship with
>> the
>> classloader that loaded LogFactoryImpl.
>> [LogFactoryImpl@15479518 from
>> org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@4999881] Trying
>> to
>> load 'org.apache.commons.logging.impl.Jdk14Logger' from classloader
>> org.eclipse.core.runtime.internal.adaptor.ContextFinder@667901
>> [LogFactoryImpl@15479518 from
>> org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@4999881] Class
>> 'org.apache.commons.logging.impl.Jdk14Logger' was found at
>> 'jar:file:/Users/hhildebrand/.m2/repository/org/springframework/osgi/commons
>> -logging.osgi/1.1-SNAPSHOT/commons-logging.osgi-1.1-SNAPSHOT.jar!/org/apache
>> /commons/logging/impl/Jdk14Logger.class'
>> [LogFactoryImpl@15479518 from
>> org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@4999881] Class
>> 'org.apache.commons.logging.impl.Jdk14Logger' was found in classloader
>> org.eclipse.core.runtime.internal.adaptor.ContextFinder@667901. It is
>> bound
>> to a Log interface which is not the one loaded from classloader
>> org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@4999881
>> [LogFactoryImpl@15479518 from
>> org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@4999881] Warning:
>> bad log hierarchy. You have more than one version of
>> 'org.apache.commons.logging.Log' visible.
>> [LogFactoryImpl@15479518 from
>> org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@4999881] Trying
>> to
>> load 'org.apache.commons.logging.impl.Jdk14Logger' from classloader
>> org.apache.maven.surefire.booter.IsolatedClassLoader@14994372
>> [LogFactoryImpl@15479518 from
>> org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@4999881] Class
>> 'org.apache.commons.logging.impl.Jdk14Logger' was found at
>> 'jar:file:/Users/hhildebrand/.m2/repository/org/springframework/osgi/commons
>> -logging.osgi/1.1-SNAPSHOT/commons-logging.osgi-1.1-SNAPSHOT.jar!/org/apache
>> /commons/logging/impl/Jdk14Logger.class'
>> [LogFactoryImpl@15479518 from
>> org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@4999881] Class
>> 'org.apache.commons.logging.impl.Jdk14Logger' was found in classloader
>> org.apache.maven.surefire.booter.IsolatedClassLoader@14994372. It is bound
>> to a Log interface which is not the one loaded from classloader
>> org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@4999881
>> [LogFactoryImpl@15479518 from
>> org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@4999881] Warning:
>> bad log hierarchy. You have more than one version of
>> 'org.apache.commons.logging.Log' visible.
>> _______________________________________________
>> equinox-dev mailing list
>> equinox-dev@xxxxxxxxxxx
>> https://dev.eclipse.org/mailman/listinfo/equinox-dev
>>
>
>
> _______________________________________________
> equinox-dev mailing list
> equinox-dev@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/equinox-dev