Well, I hate to do this, but I've gotta -1 (non-binding, of course). beta5 and beta6 are both unusable with Spring Framework (I didn't go back any further). Any time an error gets logged through log4j-jcl bridge using Spring, the error below appears in the Tomcat log, masking the error that Spring was trying to log and making it very difficult to figure out what happened. I've also included my configuration file below the stack trace. The root error is happening on Tomcat 6 due to Spring bug, and that root problem is unimportant. The important problem is the Log4j error that masks it.
I've created LOG4J2-245 regarding this issue.
SEVERE: Exception sending context initialized event to listener instance of
class org.springframework.web.context.ContextLoaderListener
java.util.EmptyStackException
at java.util.Stack.peek(Stack.java:102)
at
org.apache.logging.log4j.core.impl.ThrowableProxy.resolvePackageData(ThrowableProxy.java:339)
at
org.apache.logging.log4j.core.impl.ThrowableProxy.<init>(ThrowableProxy.java:71)
at
org.apache.logging.log4j.core.impl.Log4jLogEvent.<init>(Log4jLogEvent.java:110)
at
org.apache.logging.log4j.core.impl.Log4jLogEvent.<init>(Log4jLogEvent.java:81)
at
org.apache.logging.log4j.core.config.LoggerConfig.createEvent(LoggerConfig.java:423)
at
org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:344)
at org.apache.logging.log4j.core.Logger.log(Logger.java:110)
at
org.apache.logging.log4j.spi.AbstractLoggerWrapper.log(AbstractLoggerWrapper.java:55)
at
org.apache.logging.log4j.spi.AbstractLogger.error(AbstractLogger.java:539)
at
org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:319)
at
org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
at
org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4765)
at
org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5210)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:726)
at
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:702)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:698)
at
org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1491)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:491)
at
org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
at
com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at
com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:792)
at
org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:468)
at
org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:415)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:491)
at
org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
at
com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at
com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:792)
at
javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1465)
at
javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:75)
at
javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1306)
at
javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1398)
at
javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:827)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:491)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322)
at sun.rmi.transport.Transport$1.run(Transport.java:177)
at sun.rmi.transport.Transport$1.run(Transport.java:174)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
at
sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:556)
at
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:811)
at
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:670)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout
pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} -
%msg%n"/>
</Console>
<RollingFile name="WroxFileAppender" fileName="../logs/application.log"
filePattern="../logs/application-%d{MM-dd-yyyy}-%i.log">
<PatternLayout>
<pattern>%d{HH:mm:ss.SSS} [%t] %X{id} %X{username} %-5level
%c{36} %l: %msg%n</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="10 MB" />
</Policies>
<DefaultRolloverStrategy min="1" max="4" />
</RollingFile>
</appenders>
<loggers>
<root level="warn">
<appender-ref ref="Console" />
<appender-ref ref="WroxFileAppender" />
</root>
<logger name="com.wrox" level="info" />
<logger name="org.apache" level="info" />
<logger name="org.springframework" level="info" />
</loggers>
</configuration>
On May 6, 2013, at 10:52 PM, Ralph Goers wrote:
> This is a vote to release Log4j 2.0-beta6, the eighth release of Log4j 2.0.
> This is the second release candidate which fixes issues with a few missing
> license headers and some findbugs issues.
>
> Changes in this version include:
>
> Fixed Bugs:
> o LOG4J2-231: Logger.getParent() was not returning the correct Logger.
> o LOG4J2-201: Renamed Plugin annotation attribute from "type" to "category".
> o LOG4J2-219: Fix: install default root logger if not configured (this is
> unchanged),
> but make sure to include configured named loggers. Clarified
> documentation. Thanks to Peter DePasquale.
> o LOG4J2-159: Use OSGi version format in Fragment-Host
> o LOG4J2-234: RegexFilter threw a NullPointerException when used as a
> context-wide filter.
> o LOG4J2-192: Add support for interpolating Environment variables when
> processing the configuration.
> o LOG4J2-235: Removed dependency on tools jar from core module, made
> jconsole dependency optional. Thanks to Sebastian Oerding.
> o LOG4J2-233: Fixed link to log4j-user mailing list.
> o LOG4J2-222: Disruptor will now shutdown during Tomcat shutdown. Thanks to
> Steven Yang.
> o LOG4J2-224: The FlumeAppender failed to start if the Flume RPCClient could
> not connect to any Flume agents.
> o LOG4J2-223: Fix LoggerContext start and stop to eliminate
> IllegalStateException and NoClassDefFound errors.
> o LOG4J2-221: Remove hundreds of compiler warnings. Thanks to Nick Williams.
> o LOG4J2-215: Various small documentation fixes.
> o LOG4J2-217: Ensure PluginManager streams are always closed. Thanks to
> Fabien Sanglard.
>
> Changes:
> o LOG4J2-237: Moved JMX Client GUI classes into separate jmx-gui submodule.
> o LOG4J2-230: Improved error reporting when misconfigured. Thanks to
> Wojciech Zaręba.
> o Renamed AsynchAppender to AsyncAppender. Plugin name became Async (was
> Asynch).
> o Removed CheckStyle false positives for NewlineAtEndOfFile and whitespace
> following '*' at end of line in javadoc.
> o Moved Clock interface to package org.apache.logging.log4j.core.helpers.
> o LOG4J2-225: Documentation updates to clarify use and impact of location in
> pattern layouts.
>
> Please test and cast your votes.
> [] +1, release the artifacts
> [] -1, don't release because…
>
> The vote will remain open for 72 hours (or more if required).
>
> Tag:
> https://svn.apache.org/repos/asf/logging/log4j/log4j2/tags/log4j-2.0-beta6/
>
> Web Site: http://people.apache.org/~rgoers/log4j2/
>
> Artifacts:
> https://repository.apache.org/content/repositories/orgapachelogging-013/
>
> The artifacts may be downloaded using
> wget -e robots=off --cut-dirs=3 -r -p -np --no-check-certificate
> https://repository.apache.org/content/repositories/orgapachelogging-013/org/apache/logging/log4j/
>
> Description:
>
> Log4j 2.0-beta6 rc2
>
> Details:
>
> The following artifacts have been staged to the org.apache.logging-013
> (u:rgoers, a:99.180.69.21) repository.
>
> archetype-catalog.xml
> log4j-jmx-gui-2.0-beta6.jar.asc
> log4j-jmx-gui-2.0-beta6-sources.jar
> log4j-jmx-gui-2.0-beta6-javadoc.jar
> log4j-jmx-gui-2.0-beta6-sources.jar.asc
> log4j-jmx-gui-2.0-beta6.pom
> log4j-jmx-gui-2.0-beta6-javadoc.jar.asc
> log4j-jmx-gui-2.0-beta6.jar
> log4j-jmx-gui-2.0-beta6.pom.asc
> log4j-web-2.0-beta6.jar.asc
> log4j-web-2.0-beta6-sources.jar
> log4j-web-2.0-beta6.jar
> log4j-web-2.0-beta6-sources.jar.asc
> log4j-web-2.0-beta6-javadoc.jar.asc
> log4j-web-2.0-beta6.pom.asc
> log4j-web-2.0-beta6-javadoc.jar
> log4j-web-2.0-beta6.pom
> log4j-slf4j-impl-2.0-beta6.pom.asc
> log4j-slf4j-impl-2.0-beta6-javadoc.jar.asc
> log4j-slf4j-impl-2.0-beta6.pom
> log4j-slf4j-impl-2.0-beta6-javadoc.jar
> log4j-slf4j-impl-2.0-beta6.jar
> log4j-slf4j-impl-2.0-beta6.jar.asc
> log4j-slf4j-impl-2.0-beta6-sources.jar
> log4j-slf4j-impl-2.0-beta6-sources.jar.asc
> flume-remote-2.0-beta6.pom.asc
> flume-remote-2.0-beta6.pom
> flume-remote-2.0-beta6.war
> flume-remote-2.0-beta6.war.asc
> flume-remote-2.0-beta6-sources.jar.asc
> flume-remote-2.0-beta6-sources.jar
> flume-common-2.0-beta6.pom
> flume-common-2.0-beta6-sources.jar
> flume-common-2.0-beta6.jar
> flume-common-2.0-beta6-javadoc.jar.asc
> flume-common-2.0-beta6.jar.asc
> flume-common-2.0-beta6-sources.jar.asc
> flume-common-2.0-beta6.pom.asc
> flume-common-2.0-beta6-javadoc.jar
> flume-embedded-2.0-beta6.war
> flume-embedded-2.0-beta6.pom.asc
> flume-embedded-2.0-beta6-sources.jar.asc
> flume-embedded-2.0-beta6.pom
> flume-embedded-2.0-beta6.war.asc
> flume-embedded-2.0-beta6-sources.jar
> log4j-samples-2.0-beta6.pom
> log4j-samples-2.0-beta6.pom.asc
> log4j-jcl-2.0-beta6-javadoc.jar.asc
> log4j-jcl-2.0-beta6-sources.jar
> log4j-jcl-2.0-beta6.jar
> log4j-jcl-2.0-beta6.jar.asc
> log4j-jcl-2.0-beta6.pom.asc
> log4j-jcl-2.0-beta6.pom
> log4j-jcl-2.0-beta6-javadoc.jar
> log4j-jcl-2.0-beta6-sources.jar.asc
> log4j-taglib-2.0-beta6-javadoc.jar
> log4j-taglib-2.0-beta6.jar
> log4j-taglib-2.0-beta6-sources.jar.asc
> log4j-taglib-2.0-beta6.jar.asc
> log4j-taglib-2.0-beta6.pom
> log4j-taglib-2.0-beta6.pom.asc
> log4j-taglib-2.0-beta6-javadoc.jar.asc
> log4j-taglib-2.0-beta6-sources.jar
> log4j-distribution-2.0-beta6-src.tar.gz.asc
> log4j-distribution-2.0-beta6-bin.tar.gz
> log4j-distribution-2.0-beta6-src.tar.gz
> log4j-distribution-2.0-beta6-bin.tar.gz.asc
> log4j-distribution-2.0-beta6-src.zip
> log4j-distribution-2.0-beta6-bin.zip.asc
> log4j-distribution-2.0-beta6-src.zip.asc
> log4j-distribution-2.0-beta6.pom.asc
> log4j-distribution-2.0-beta6-bin.zip
> log4j-distribution-2.0-beta6.pom
> log4j-1.2-api-2.0-beta6-sources.jar
> log4j-1.2-api-2.0-beta6-javadoc.jar
> log4j-1.2-api-2.0-beta6-sources.jar.asc
> log4j-1.2-api-2.0-beta6-javadoc.jar.asc
> log4j-1.2-api-2.0-beta6.pom
> log4j-1.2-api-2.0-beta6.jar
> log4j-1.2-api-2.0-beta6.jar.asc
> log4j-1.2-api-2.0-beta6.pom.asc
> log4j-flume-ng-2.0-beta6.jar.asc
> log4j-flume-ng-2.0-beta6-sources.jar.asc
> log4j-flume-ng-2.0-beta6-sources.jar
> log4j-flume-ng-2.0-beta6-javadoc.jar.asc
> log4j-flume-ng-2.0-beta6.jar
> log4j-flume-ng-2.0-beta6-tests.jar.asc
> log4j-flume-ng-2.0-beta6-tests.jar
> log4j-flume-ng-2.0-beta6-javadoc.jar
> log4j-flume-ng-2.0-beta6.pom.asc
> log4j-flume-ng-2.0-beta6.pom
> log4j-to-slf4j-2.0-beta6-sources.jar
> log4j-to-slf4j-2.0-beta6-sources.jar.asc
> log4j-to-slf4j-2.0-beta6-javadoc.jar
> log4j-to-slf4j-2.0-beta6.jar
> log4j-to-slf4j-2.0-beta6.jar.asc
> log4j-to-slf4j-2.0-beta6.pom
> log4j-to-slf4j-2.0-beta6-javadoc.jar.asc
> log4j-to-slf4j-2.0-beta6.pom.asc
> log4j-api-2.0-beta6.jar.asc
> log4j-api-2.0-beta6-sources.jar
> log4j-api-2.0-beta6-javadoc.jar
> log4j-api-2.0-beta6.pom.asc
> log4j-api-2.0-beta6-javadoc.jar.asc
> log4j-api-2.0-beta6.pom
> log4j-api-2.0-beta6.jar
> log4j-api-2.0-beta6-sources.jar.asc
> log4j-core-2.0-beta6.jar
> log4j-core-2.0-beta6-sources.jar
> log4j-core-2.0-beta6-sources.jar.asc
> log4j-core-2.0-beta6-tests.jar
> log4j-core-2.0-beta6-javadoc.jar.asc
> log4j-core-2.0-beta6.jar.asc
> log4j-core-2.0-beta6-javadoc.jar
> log4j-core-2.0-beta6.pom.asc
> log4j-core-2.0-beta6-tests.jar.asc
> log4j-core-2.0-beta6.pom
> log4j-2.0-beta6.pom.asc
> log4j-2.0-beta6.pom
smime.p7s
Description: S/MIME cryptographic signature
