我有一个Spring / Hibernate应用程序,我已将其转换为Web应用程序,以便提供RESTful Web服务(使用Jersey)。我正在尝试将Web应用程序部署到Tomcat 6.0.20上,我在日志文件中只收到一条神秘的错误消息:
Jul 8, 2009 2:25:22 PM org.apache.catalina.core.StandardContext start
SEVERE: Error listenerStart
Jul 8, 2009 2:25:22 PM org.apache.catalina.core.StandardContext start
SEVERE: Context [/lmrest] startup failed due to previous errors
我已将我的日志记录级别设置为调试,但没有可疑消息显示出错的内容,除了这个,这对我来说非常无害:
1360 [http-8080-1] INFO org.hibernate.cfg.search.HibernateSearchEventListenerRegister - Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled.
我使用的是最新版本的Spring和Hibernate。我在web.xml中使用ContextLoaderListener。这可能是未能启动的听众吗?我认为它至少部分运行,因为我可以看到许多Hibernate配置日志消息在Web应用程序启动失败之前滚动过去。我的主要麻烦是我看不到任何错误消息,表明未能启动它正在抱怨的监听器。
我正在使用的web.xml如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- listener to pull in the Spring application context -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:appContext.xml</param-value>
</context-param>
<!-- Jersey servlet container to intercept all URIs -->
<servlet>
<servlet-name>JerseyContainer</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JerseyContainer</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
如果有人能给我一些关于在哪里寻找我的错误的想法,我会非常感激,因为我很难过。提前谢谢!
- 詹姆斯
答案 0 :(得分:3)
请执行以下操作:
此配置应确保所有log4j输出都已正确定向。如果需要,切换到调试,但它不应该是:
log4j.rootLogger=info, R
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=${catalina.home}/logs/catalina.out
log4j.appender.R.MaxFileSize=10MB
log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d %p %t %c - %m%n
答案 1 :(得分:3)
在ubuntu 12.04下,tomcat7系统日志存储在/var/lib/tomcat7/localhost.<date>.log
此位置由/etc/tomcat7/logging.properties
:
handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
.handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################
1catalina.org.apache.juli.FileHandler.level = FINE
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.
2localhost.org.apache.juli.FileHandler.level = FINE
2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.FileHandler.prefix = localhost.
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.FileHandler
由于Tomcat错误导致启动失败,而不是应用程序错误,因此这是详细报告的结果。在我看来,Tomcat抱怨缺少类定义。
SEVERE: Error configuring application listener of class com.foo.security.tomcat.CustomSessionListener
java.lang.ClassNotFoundException: com.alleni.zebra.security.tomcat.CustomSessionListener
答案 2 :(得分:1)
检查log4j.properties或log4j.xml并确保您的日志记录级别设置为 DEBUG
答案 3 :(得分:1)
Apache找不到类org.hibernate.cfg.search.HibernateSearchEventListenerRegister。 你确定在classpath中加载了启动hibernate所需的所有类吗? Hibernate分为很多.jar包,我建议你检查文件之间的依赖关系.jar
答案 4 :(得分:0)
日志中是否有任何错误(在较早的时间点)?这没什么可说的(尽管如此,我不会感到惊讶)。
答案 5 :(得分:0)
Here在SprinSource论坛上也有类似的讨论。由于applicationContext.xml适用于标准JAR,因此很可能是类路径问题。仔细检查WEB-INF / lib文件夹,确保Tomcat的共享文件夹中没有冲突的jar。
答案 6 :(得分:0)
可能是类路径,或者没有加载的东西......正如其他人所说的那样,让日志工作正常。
1)我建议使用'二分搜索'方法来查找错误。注释掉web.xml中的“Jersey”部分。看它是否有效(或至少启动)。
2)如果没有,请注释掉Spring ContextLoaderListener。看看它是否有效。
3)一旦找到有问题的项目,你就可以“二进制搜索”它的配置文件 - 注释掉一半的配置等,直到找到有问题的部分或类引用。
如果删除web.xml的两个/所有部分,并且您的上下文仍然无法加载..请查看Tomcat / Catalina上下文侦听器&amp;服务器配置。