Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [jetty-users] Jetty + Slf4j

Hi Julio,
We faced this issue with jetty6 with the standard distribution.
We chose to do this:
1- remove *slf4j*, commons-logging, log4j jars from the webapp.
2- add a jetty6-web.xml inside the WEB-INF of our web-application that
contains this xml:
<?xml version="1.0"  encoding="ISO-8859-1"?>
<Configure class="org.mortbay.jetty.webapp.WebAppContext">
    <Set name="serverClasses">
        <Array type="java.lang.String">
            <Item>-org.mortbay.jetty.plus.jaas.</Item>
            <Item>org.mortbay.jetty.</Item>
        </Array>
    </Set>
</Configure>

Jetty6 does something special with the webapp classloader that
prevents a web-application to access the org.slf4j.* classes that are
provided by the server's classloader. I have not really understood the
reason for this; although I am guessing it is to support some
isolation of the logging for each webapp.
Adding this jetty6-web.xml will basically let your webapp access the
shared slf4j. slf4j will locate the other *slf4j* jars in the server's
classes loader.


This setup will enforce "centralized" logging in jetty6:
the configuration of the logging is done in one single place:
${jetty.home}/resources/log4j.properties (or logback.xml)
for all web-applications.
You should add log4j.jar inside the shared libraries (or
logback-core+logback-classic). In the standard distribution of jetty6
that would be inside ${jetty.home}/lib/ext.
I am not sure where it is in the debian distribution.


Jetty7 will support configuration of centralized logging as an option
and I believe will not have this kind of difficult issue anymore.

I hope this helps,
Hugues.

On Tue, Dec 8, 2009 at 10:39 AM, Julio Viegas
<julioviegas@xxxxxxxxxxxxxxx> wrote:
> Hello Diego,
>
>   How are you starting Jetty? I mean, can you check your Jetty's JVM
> classpath setting?
>
>   I suspect "jar:file:/usr/share/java/slf4j-simple-1.5.8.jar" is
> inside your $CLASSPATH or something like that...
>
> Rgrds,
> JV -- julioviegas.com
>
> On Tue, Dec 8, 2009 at 16:26, Diego Plentz <diego@xxxxxxxxxx> wrote:
>> Hey guys,
>> I'm using jetty 6.1.x installed through apt-get in a Ubuntu box. When I
>> deploy my application, I have a problem with slf4j. If I deploy my war with
>> slf4j-log4j12-1.5.8.jar, I have this message:
>> SLF4J: Class path contains multiple SLF4J bindings.
>> SLF4J: Found binding in
>> [jar:file:/usr/share/java/slf4j-simple-1.5.8.jar!/org/slf4j/impl/StaticLoggerBinder.class]
>> SLF4J: Found binding in
>> [jar:file:/var/cache/jetty/Jetty_0_0_0_0_8080_suporte_promotor.war___suporte.promotoronline.com.br_ivstzq/webapp/WEB-INF/lib/slf4j-log4j12-1.5.8.jar!/org/slf4j/impl/StaticLoggerBinder.class]
>> SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an
>> explanation.
>> But, if I remove the jar from the war file, I have a NoClassDefFoundError:
>> Caused by: java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
>> at org.slf4j.LoggerFactory.getSingleton(LoggerFactory.java:223)
>> at org.slf4j.LoggerFactory.bind(LoggerFactory.java:120)
>> at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:111)
>> at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:269)
>> ....
>> What is the correct behavior?
>> --
>> http://plentz.org
>> http://twitter.com/plentz
>>
>> _______________________________________________
>> jetty-users mailing list
>> jetty-users@xxxxxxxxxxx
>> https://dev.eclipse.org/mailman/listinfo/jetty-users
>>
>>
> _______________________________________________
> jetty-users mailing list
> jetty-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/jetty-users
>


Back to the top