1

I have a simple J2ee application with Spring MVC. Now I want to insert a logger file. So I have insert this code in springmvc-servlet:

<bean id="lo4gjConfigurator" class="com.springmvcapp.log.LoggerFactory">
       <property name="logReInit">
        <value>@logReInit@</value>
       </property>  
       <property name="fileName">
        <value>log4j.xml</value>
       </property> 
    </bean>

but if I try to load the page when the server is started, I have this error

javax.servlet.ServletException: Servlet.init() for servlet springmvcapp threw exception
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    java.lang.Thread.run(Unknown Source)

root cause

org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [com.springmvcapp.log.LoggerFactory] for bean with name 'lo4gjConfigurator' defined in ServletContext resource [/WEB-INF/springmvcapp-servlet.xml]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor
    org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1269)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:581)
    org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1335)
    org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:901)
    org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:607)
    org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
    org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:652)
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:600)
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:666)
    org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:519)
    org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:460)
    org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
    javax.servlet.GenericServlet.init(GenericServlet.java:160)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    java.lang.Thread.run(Unknown Source)

EDIT: this is the log4j.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="ROOT_APPENDER" class="capacita.apache.log4j.RollingFileAppender">
        <param name="file" value="@log4j.logs@/pcs.log"/>
        <param name="MaxFileSize" value="50MB"/>
        <param name="MaxBackupIndex" value="5"/>
        <layout class="capacita.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{dd/MM/yyyy HH:mm:ss} | %X{serverInstance} | %p | %X{sessionId} | %C{1} | %M | %m%n"/>
        </layout>
    </appender>

    <appender name="ERROR_APPENDER" class="capacita.apache.log4j.RollingFileAppender">
        <param name="file" value="@log4j.logs@/err_pcs.log"/>
        <param name="MaxFileSize" value="50MB"/>
        <param name="MaxBackupIndex" value="5"/>
        <layout class="capacita.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{dd/MM/yyyy HH:mm:ss} | %X{serverInstance} | %p | %X{sessionId} | %m%n"/>
        </layout>
    </appender>

    <appender name="LOGIN_APPENDER" class="com.springmvcapp.log.RollingFileAppender">
        <param name="file" value="@log4j.logs@/login-pcs.log"/>
        <rollingPolicy class="com.springmvcapp.log.TimeBasedRollingPolicy">
            <param name="fileNamePattern" value="@log4j.logs@/log-pcs-%d{yyyyMMdd}.log"/>
        </rollingPolicy>
        <layout class="capacita.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{dd-MM-yyyy HH:mm:ss}|%m%n"/>
        </layout>
    </appender>

    <appender name="CONSOLE_APPENDER" class="capacita.apache.log4j.ConsoleAppender">
        <layout class="capacita.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%d{HH:mm:ss}] [%p] [%C{1}].[%M](%L) %m%n"/>
        </layout>
    </appender>

    <appender name="AXIS_APPENDER" class="capacita.apache.log4j.RollingFileAppender">
        <param name="file" value="@log4j.logs@/axis_pcs.log"/>
        <param name="MaxFileSize" value="50MB"/>
        <param name="MaxBackupIndex" value="5"/>
        <layout class="capacita.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{dd/MM/yyyy HH:mm:ss} | %X{serverInstance} | %p | %X{sessionId} | %C{1} | %M | %m%n"/>
        </layout>
    </appender>

    <appender name="DAEMON_APPENDER" class="capacita.apache.log4j.RollingFileAppender">
        <param name="file" value="@log4j.logs@/daemon_pcs.log"/>
        <param name="MaxFileSize" value="50MB"/>
        <param name="MaxBackupIndex" value="5"/>
        <layout class="capacita.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{dd/MM/yyyy HH:mm:ss} | %X{serverInstance} | %p | %X{sessionId} | %C{1} | %M | %m%n"/>
        </layout>
    </appender>

    <category name="log4j.logger.org.apache.axis.SOAPPart">
        <priority value="DEBUG"/>
        <appender-ref ref="AXIS_APPENDER"/>
    </category>

    <logger name="AXIS">
        <level value="DEBUG"/>
        <appender-ref ref="AXIS_APPENDER"/>
    </logger>


    <logger name="org.springframework">
        <level value="ERROR"/>
        <appender-ref ref="ROOT_APPENDER"/>
    </logger>


    <logger name="ERROR">
        <level value="ERROR"/>
        <appender-ref ref="ERROR_APPENDER"/>
        <!--appender-ref ref="CONSOLE_APPENDER"/-->
    </logger>

    <logger name="ROOT">
        <level value="DEBUG"/>
        <level value="INFO"/>
        <appender-ref ref="ROOT_APPENDER"/>
        <appender-ref ref="CONSOLE_APPENDER"/>
        <!--appender-ref ref="CONSOLE_APPENDER"/ -->
    </logger>

    <logger name="LOGIN">
        <level value="DEBUG"/>
        <appender-ref ref="LOGIN_APPENDER"/>
        <!--appender-ref ref="CONSOLE_APPENDER"/-->
    </logger>

    <logger name="DAEMON">
        <level value="DEBUG"/>
        <appender-ref ref="DAEMON_APPENDER"/>
        <!--appender-ref ref="CONSOLE_APPENDER"/-->
    </logger>
</log4j:configuration>
bircastri
  • 2,169
  • 13
  • 50
  • 119
  • Did you check http://stackoverflow.com/questions/1509757/injecting-log4j-loggers-with-spring and http://stackoverflow.com/questions/4400583/initializing-log4j-with-spring ? – erhun Feb 16 '15 at 20:07
  • I have fixed the error, I have change the library of log4j and I have insert this line code to create a logger file in the log4j.xml: "C:/webapps/err_pcs.log" So now I don't have an errory when I try to write on logger file and I don't have any error but the err_pcs.log don't create. Where is my error? – bircastri Feb 17 '15 at 11:07

2 Answers2

1

With spring for example, you have src/main/java and in other source folder you have src/main/resources and inside of that folder you have to post your log4j.xml

nole
  • 1,422
  • 4
  • 20
  • 32
0

Try with logback.xml is easy to implement. http://logback.qos.ch/reasonsToSwitch.html

nole
  • 1,422
  • 4
  • 20
  • 32
  • Can you post log4j.xml? – nole Feb 16 '15 at 17:08
  • 1
    You don't have to insert that code in the servlet, is enough with this xml. log4j-config.xml. http://howtodoinjava.com/2013/04/08/how-to-configure-log4j-using-xml-configuration/ – nole Feb 16 '15 at 17:11
  • For nole, I have edit my question, and I have insert the code of log4j.xml – bircastri Feb 17 '15 at 08:13