Tomcat启动日志-严重:错误filterStart如何获取堆栈跟踪?


96

当我启动Tomcat时,出现以下错误:

Jun 10, 2010 5:17:25 PM org.apache.catalina.core.StandardContext start
SEVERE: Error filterStart
Jun 10, 2010 5:17:25 PM org.apache.catalina.core.StandardContext start
SEVERE: Context [/mywebapplication] startup failed due to previous errors

Tomcat的日志中不包含堆栈跟踪信息,这似乎很奇怪。有人对如何增加Tomcat中的日志记录以获取诸如此类错误的堆栈跟踪的建议吗?


1
我使用的是Guice-Servlet,通过对该框架的设置方法进行尝试/捕获,我能够捕获所有异常,并在登录自己后将其重新抛出。我仍然不得不盲目地调试以使Guice-Servlet的过滤器正常工作,但是添加的任何东西似乎都可以正常工作。
benstpierre 2010年

1
似乎堆栈跟踪goto stdout,但是Intellij不会读取Tomcat的stdout。tomcat.apache.org/tomcat-6.0-doc/logging.html 我需要将tomcat中的stdout重定向到文件,以便Intellij可以查看它。
benstpierre 2010年

Answers:


138

检查Tomcat创建的localhost_yyyy_mm_dd.logOR localhost.yyyy-mm-dd.log日志,这些日志通常存储该类型的信息。我不希望将完整的堆栈跟踪信息转储到标准输出中。


我的Tomcat 5.5实例不写入该文件。
Arne Evertsson,2010年

3
到目前为止,“错误过滤器启动”困扰了我的噩梦……再也没有!你摇滚!
科迪S

您很高兴在开发过程中发现其中之一。非常感谢。
Francisco Lozano 2013年

我的Tomcat 6(具有默认设置)从不向文件写入任何内容,我不得不打开ConsoleHandler来读取出了什么问题,然后在Catalina输出文件中写入了异常。

2
@mattblang看看$ TOMCAT_HOME / conf / logging.properties。默认设置是违反直觉的。
马特b

80

在WEB-INF / classes中创建一个名为logging.properties的文件,其内容如下:

org.apache.catalina.core.ContainerBase.[Catalina].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].handlers = java.util.logging.ConsoleHandler

请注意,如果您在WEB-INF中没有类目录,则可以只创建一个,这样就可以正常工作。
Muhd

21

Tomcat确实记录了堆栈跟踪,但是当从IDE启动tomcat时,并不总是清楚日志文件在哪里。当我从IntelliJ启动它时,CATALINA_BASE设置为${home}/.IntelliJIdea10/system/tomcat/Unnamed_r6-idea,并且日志文件在中[CATALINA_BASE]/logs

要查看日志,请找到日志文件,或进行编辑[CATALINA_HOME]/conf/logging.properties以将tomcat logger输出定向到控制台。下面,我在默认的tomcat配置中添加了第二个处理程序:

 org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
 org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler

现在,完整的堆栈跟踪将出现在IntelliJ输出中:

 Dec 27, 2011 12:02:45 PM org.apache.catalina.core.StandardContext filterStart
 SEVERE: Exception starting filter filterChainProxy
 org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'filterChainProxy' is defined   at
 org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:529)
 . . .

9

您需要复制文件

cp /path/to/solr/example/lib/ext/* /path/to/tomcat/lib
cp /path/to/solr/example/resources/* /path/to/tomcat/lib // or inside extracted solr

然后重启 tomcat


3
是的,这救了我!。另外,最好查看/path/to/solr/example/resources/log4j.properties并编辑您的日志目录
2014年

5

也许您的应用程序是使用与Tomcat不同的JRE编译的。

检查java -version服务器,然后使用相同版本编译代码。我遇到了错误,因为我的Eclipse标准JRE是1.6,而Tomcat使用了1.5-这是行不通的。


2

在CentOS 6和Solr 4.4.0中

我必须编译一些lib文件才能解决此错误

cp ~/solr-4.4.0/example/lib/ext/* /usr/share/tomcat6/lib/

这也为我解决了问题。Ubuntu 14.04和solr 4.8.1和tomcat 7
cjungel

2

通常,在localhost。[date] .log中有关于此问题的信息。但是有时此日志中没有任何内容。如果项目的配置混乱(多个开发人员从事了很长时间,并且每个人都从自己身上添加了一些东西),就会发生这种情况。我在没有任何日志信息的情况下遇到了这个问题。更快,更强大的方法:

  1. 尝试删除所有可能导致web.xml出现问题的内容。您甚至可以删除标签以外的所有内容。如果仍然无法部署应用程序,请继续。

  2. 从WEB-INF / classes中删除每个* .xml描述符。如果无法部署应用程序-继续。

  3. 删除您可以在战争中找到的所有日志记录配置(logging.properties,log4j.properties)。尝试部署。在这一步,我得到了更多有用的错误,但是部署仍然失败。

搜索该错误后,我发现该项目包含旧版本的xerces,该版本与Tomcat的版本(较新)冲突,并且没有部署该应用程序。Web应用程序中的xerces升级后,一切都变得很好。


1

为Tomcat设置log4j日志非常简单。以下引自 http://tomcat.apache.org/tomcat-5.5-doc/logging.html的

  1. 创建具有以下内容的名为log4j.properties的文件,并将其保存到common / classes中。

              log4j.rootLogger=DEBUG, R 
              log4j.appender.R=org.apache.log4j.RollingFileAppender 
              log4j.appender.R.File=${catalina.home}/logs/tomcat.log 
              log4j.appender.R.MaxFileSize=10MB 
              log4j.appender.R.MaxBackupIndex=10 
              log4j.appender.R.layout=org.apache.log4j.PatternLayout 
              log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
  2. 下载Log4J(v1.2或更高版本)并将log4j jar放在$ CATALINA_HOME / common / lib中。

  3. 下载Commons Logging,并使用log4j jar将commons-logging-xyzjar(不是commons-logging-api-xyzjar)放置在$ CATALINA_HOME / common / lib中。
  4. 启动Tomcat

您可能还想看看http://wiki.apache.org/tomcat/FAQ/Logging


这会导致部署异常实际正确记录吗?
benstpierre 2010年

是。我已经使用了这种确切的方法来确定部署期间出现问题的原因。
Tommi 2010年

1
抱歉,日志文件的DEBUG级别无法渗透。它确实包含一些似乎与该问题没有任何关系的异常-我怀疑这是我的情况下的Struts问题。
阿恩·埃弗森

1

如果有人遇到类似“严重”的错误:error filterStart 2013年4月29日下午4:49:20 org.apache.catalina.core.StandardContext startInternal严重:由于先前的错误,上下文[/ TraceMW]启动失败

然后请检查您的tomcat / lib目录是否包含cors-filter-1.5.jar。如果您点了,您将得到上述错误,并且您的应用程序将不可用。

因此,我只是设法从其他tomcat文件夹复制了jar文件,后来我没有得到上述错误。


1

我也遇到同样的错误,并且在解决此问题上费了很多力气。在搜索Google时花了一些时间,发现以下解决方案可以解决我的问题。

该问题是由于部署路径中缺少Struts2库造成的。大多数人可能会将这些库用于编译,而倾向于忘记为运行时附加所需的库。因此,我在Web部署程序集中添加了相同的库,而该问题已解决。


1

我遇到了同样的问题,一旦将其部署在tomcat中就无法启动该应用程序。但是,一旦将Struts罐子集复制到CATALINA_HOME \ lib(Tomcat目录)目录中,就可以解决。您不需要将这些jar保存在WEB_INF \ lib中,但需要将它们保存在构建路径中。

commons-fileupload-1.2.1.jar

commons-io-1.3.2.jar

freemarker-2.3.16.jar

javassist-3.11.0.GA.jar

struts2-convention-plugin-2.2.1.jar

struts2-core-2.2.1.jar

xwork-core-2.2.1.jar


0

只是想在花了最后一个小时解决几乎相同的问题后做出贡献。我的解决方案是某种程度上我们的应用程序.jar损坏了,所以从我们的开发服务器放置jar可以解决问题。


0

我有一个类似的问题。Renato的小费对我有用。我使用了旧版本的Java类文件(在WEB-INF / classes文件夹下),问题消失了。因此,应该是编译器版本不匹配。


0

这帮了我大忙:只需删除所有库,然后编译并运行即可。这会提示他们是您的项目中的错误确认。应用库后,重新运行项目。


0

通常,服务器JDK版本将低于已部署的应用程序(使用更高的jdk版本构建)


-1

运行以下命令以在终端上显示Catalina日志-

sh start-camunda.sh; tail -f server/apache-tomcat-8.0.24/logs/catalina.out
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.