最近在生产环境部署Tomcat的时候,在启动的时候,在控制台报“java.lang.ClassNotFoundException: 1catalina.org.apache.juli.FileHandler”这样子类似的错误。

原因

这个极有可能是因为你修改了catalina.sh文件(比如,你想修改下JVM的参数等)。

这个错误,会导致在Tomcat的logs目录下的localhost.yyyy-MM-dd这类的日志文件不会进行记录的了。

解决办法

正确的处理方式为: 在Tomcat的安装目录下的bin目录下,创建一个 setenv.sh的文件,然后写入你想要修改的参数,比如我的如下:

#!/bin/sh

CATALINA_OPTS="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"

说明:

-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager:这个参数就是解决上面报的问题的 -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n: 这个参数是使用远程调试的

还有一点要特别注意的是:它是使用CATALINA_OPTS参数,而不是JAVA_OPTS。不知道为什么,我在JAVA_OPTS里修改,一直没有生效。*_*

这个问题困惑了我好久,今天终于认真看看Tomcat官方文档,才得以解决。

更新

2016-7-5

经过学习,CATALINA_OPTS参数是针对Tomcat本身的, 而JAVA_OPTS则是控制我们的应用的.所以JAVA_OPTS里修改这参数,并没有传递到CATALINA_OPTS里.