Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
339 views
in Technique[技术] by (71.8m points)

java - jboss not using logback for logging

I'm migrating an application that used to use log4j to logback/slf4j and have been having issues for about 2 weeks now... I made a small project to test logback/slf4j and that worked great, but for some reason when applying it to the actual app it just doesnt want to work.

I'm using JBoss 6.2 and deploying an EAR to the standalone/deployments directory and starting the server (which is all good and happy, except for the fact that I'm getting this exception java.lang.ClassCastException: org.slf4j.impl.Slf4jLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext) but anyway, back to the main problem.

when I run the application I get this printed to the log file I specified

 10:51:06.752 [main] DEBUG org.jboss.logging - Logging Provider: org.jboss.logging.Slf4jLoggerProvider
10:51:06.780 [main] DEBUG o.j.n.r.client.InitialContextFactory - Looking for jboss-naming-client.properties using classloader sun.misc.Launcher$AppClassLoader@194d4313
10:51:06.782 [main] DEBUG o.j.n.r.client.InitialContextFactory - jboss.naming.client.endpoint.create.options. has the following options {}
10:51:06.783 [main] DEBUG o.j.n.r.client.InitialContextFactory - jboss.naming.client.remote.connectionprovider.create.options. has the following options {}
10:51:06.789 [main] INFO  org.xnio - XNIO Version 3.0.7.GA-redhat-1
10:51:06.798 [main] INFO  org.xnio.nio - XNIO NIO Implementation Version 3.0.7.GA-redhat-1
10:51:06.815 [main] INFO  org.jboss.remoting - JBoss Remoting version 3.2.18.GA-redhat-1
10:51:06.856 [Remoting "config-based-naming-client-endpoint" read-1] DEBUG org.xnio.nio - Started channel thread 'Remoting "config-based-naming-client-endpoint" read-1', selector sun.nio.ch.WindowsSelectorImpl@2668d102
10:51:06.856 [Remoting "config-based-naming-client-endpoint" write-1] DEBUG org.xnio.nio - Started channel thread 'Remoting "config-based-naming-client-endpoint" write-1', selector sun.nio.ch.WindowsSelectorImpl@2b71ee01
10:51:06.915 [main] DEBUG o.j.n.r.client.InitialContextFactory - jboss.naming.client.connect.options. has the following options {}
10:51:07.393 [main] DEBUG org.hornetq.core.client - Trying reconnection attempt 0/1
10:51:07.401 [main] DEBUG org.hornetq.core.client - Trying to connect with connector = org.hornetq.core.remoting.impl.netty.NettyConnectorFactory@b2e86ae, parameters = {port=5445, host=localhost} connector = NettyConnector [host=localhost, port=5445, httpEnabled=false, useServlet=false, servletPath=/messaging/HornetQServlet, sslEnabled=false, useNio=false]
10:51:07.425 [main] DEBUG org.hornetq.core.client - Started Netty Connector version 3.6.6.Final-redhat-1-fd3c6b7
10:51:07.425 [main] DEBUG org.hornetq.core.client - Trying to connect at the main server using connector :TransportConfiguration(name=netty, factory=org-hornetq-core-remoting-impl-netty-NettyConnectorFactory) ?port=5445&host=localhost
10:51:07.426 [main] DEBUG org.hornetq.core.client - Remote destination: localhost/127.0.0.1:5445
10:51:07.481 [main] DEBUG org.hornetq.core.client - Reconnection successfull
10:51:07.494 [Thread-1 (HornetQ-client-global-threads-272238939)] DEBUG org.hornetq.utils - using dummy address ffffffe9:6c:ffffff84:ffffffb0:2e:-127
10:51:07.496 [main] DEBUG org.hornetq.core.client - ClientSessionFactoryImpl received backup update for live/backup pair = TransportConfiguration(name=netty, factory=org-hornetq-core-remoting-impl-netty-NettyConnectorFactory) ?port=5445&host=localhost / null but it didn't belong to TransportConfiguration(name=netty, factory=org-hornetq-core-remoting-impl-netty-NettyConnectorFactory) ?port=5445&host=localhost
10:51:07.779 [Remoting "config-based-naming-client-endpoint" task-3] ERROR o.j.n.r.p.v1.RemoteNamingStoreV1 - Channel end notification received, closing channel Channel ID c0d4d8c1 (outbound) of Remoting connection 6fb0b6e3 to localhost/127.0.0.1:4447

HOWEVER!!! this is all that is printed to my log file, the rest of the log.info/log.warn etc... are all printed to the standalone/log/server.log file

here is my logback.xml

     <?xml version="1.0" encoding="UTF-8"?>
    <configuration scan="true">
        <appender
            name="ConsoleAppender"
            class="ch.qos.logback.core.ConsoleAppender">


        <encoder>
            <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
        </encoder>
    </appender>

  <!-- Rollover at midnight each day  -->
    <appender
        name="LOG_AUDIT"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--  <errorHandler class="org.apache.log4j.helpers.OnlyOnceErrorHandler" /> -->

        <file>${my.logPath}/Logs/MYLOG.log</file>
        <append>true</append>
        <datePattern>'.'yyyy-MM-dd</datePattern>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>logFile.%d{yyyy-MM-dd}.log</FileNamePattern>
        </rollingPolicy>

        <!-- encoders are assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
        <!--<encoder>
            <pattern>&lt;%5p ${obphm.version}&gt; [%d{ISO8601}] %t %c - %m%n</pattern>
        </encoder>-->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender
        name="ERROR_AUDIT"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--  <errorHandler class="org.apache.log4j.helpers.OnlyOnceErrorHandler" /> -->
        <file>${my.logPath}/Logs/MYERRORS.log</file>
        <append>true</append>
        <datePattern>'.'yyyy-MM-dd</datePattern>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>logFile.%d{yyyy-MM-dd}.log</FileNamePattern>
        </rollingPolicy>

        <!-- encoders are assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            <!--<pattern>&lt;%5p ${obphm.version}&gt; [%d{ISO8601}] %t %c - %m%n</pattern>-->
        </encoder>
    </appender>

    <root level="DEBUG">
        <appender-ref ref="LOG_AUDIT" />
        <appender-ref ref="ERROR_AUDIT" />
        <appender-ref ref="ConsoleAppender" />
    </root>
</configuration>

and I also tried to make a jboss-deployment-structure.xml for exclusions;

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <ear-subdeployments-isolated>false</ear-subdeployments-isolated>
    <deployment>
        <exclusions>
            <module name="org.apache.commons.logging" />
            <module name="org.slf4j" />
            <module name="org.slf4j.ext" />
            <module name="org.slf4j.jcl-over-slf4j" />

            <module name="org.slf4j.impl" />
            <module name="org.apache.log4j" />
        </exclusions>
        <dependencies>

            <module name="ch.qos.logback" />
            <module name="org.slf4j.v175" />
        </dependencies>
    </deployment>

</jboss-deployment-structure>

but that doesnt seem to be doing anything, it's still trying to access org.slf4j.impl for some reason... I have the jboss-deployment-structure the META-INF folder of the ear, and the logback.xml in one of the ejb's ejbmodule folders which gets packaged with the ear (would that make it a subdeployment??)

I'm not sure what I'm missing, I hope someone can help

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Fixed- this project only deploys an EAR file which has 2 ejb jars packaged alongside it. My first attempts involved making a jboss-deployment-structure.xml which had this format:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<ear-subdeployments-isolated>false</ear-subdeployments-isolated>
    <deployment>
        <!--Exclusions allow you to prevent the server from automatically adding 
            some dependencies-->
        <exclusions>
            <module name="org.apache.commons.logging" />
            <module name="org.slf4j" />
            <module name="org.slf4j.ext" />
            <module name="org.slf4j.impl" />
            <module name="org.apache.log4j" />
            <module name="org.jboss.logmanager"/> 
            <module name="jcl-over-slf4j"/>
        </exclusions>

        <dependencies>
            <module name="org.slf4j.v175" />
            <module name="ch.qos.logback" /> 

        </dependencies>
        </deployment>
</jboss-deployment-structure>

I tried multiple variations of exclusions/dependencies and nothing seemed to work.

I then decided to add subdeployments for each of the ejb jars that are bundled in the ear (from 2 other projects) and added exclusions/dependencies for those, and finally it seemed to work. However, after doing this, the server cant find logback.xml... maybe that's because I've set up joran configurator in the code, not sure.

heres the latest jboss-deployment-structure.xml

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<ear-subdeployments-isolated>false</ear-subdeployments-isolated>
<deployment></deployment> <!-- doesnt need anything in here -->
<sub-deployment name="myjar.jar">
        <exclusions>
            <module name="org.apache.commons.logging" /> 
            <module name="org.slf4j" />
            <module name="org.slf4j.ext" />
            <module name="org.slf4j.impl" />
            <module name="org.apache.log4j" /> 
            <module name="org.jboss.logmanager"/> 
            <module name="jcl-over-slf4j"/>
        </exclusions>
        <dependencies>
            <module name="org.slf4j.log4j-over-slf4j"/>
            <module name="org.slf4j.v175" />
            <module name="ch.qos.logback" />

        </dependencies>
    </sub-deployment>
    <sub-deployment name="mysecondjar.jar">
        <exclusions>
            <module name="jcl-over-slf4j"/>
            <module name="org.apache.commons.logging" />
            <module name="org.slf4j" />
            <module name="org.slf4j.ext" />
            <module name="org.slf4j.impl" />
            <module name="org.apache.log4j" /> 
            <module name="org.jboss.logmanager"/> 
        </exclusions>
        <dependencies>
            <module name="org.slf4j.log4j-over-slf4j"/>
            <module name="org.slf4j.v175" />
            <module name="ch.qos.logback" />

        </dependencies>
    </sub-deployment>

</jboss-deployment-structure>

also... the dependencies in here are custom made using the existing modules in jboss as a reference. Those could be find in your jboss_home_install/modules/


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...