12月 092016
 

今日有同事提到某机器的tomcat启动后无法产生localhost文件,但catalina.out和localhost.access等访问文件却都可以产生,奇怪了。

比较可以产生和不能产生的两台机器,发现logging.properties等配置都是一样的,但就是logging.properties配置的文件似乎都无法产生,后来经过排查,发现classpath不同, 在不能产生localhost文件的机器上的classpath前多了一些类似“ /usr/local/jdk/lib:/usr/local/jdk/jre/lib ” 的数据。

原来运维为了配置环境变量,在tomcat的bin目录下添加了一个setenv.sh的配置文件,这个文件在catalina.sh运行时会判断如果有这个文件就会执行(见catalina.sh文件), 而setenv.sh配置了这样语句命令export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib。删除这条命令即可, 或者不要使用自定义的setenv.sh。

问题分析:

打开catalina.sh文件, 可以看到tomcat在启动时在catalina.sh中实际会给classpath添加 tomcat-juli.jar包,这个jar包用于解析logging.properties并生成对应的文件如:localhost、manager等文件, 但在如果在classpath中配置了jdk/jre的lib路径, 并且配置在 tomcat-juli.jar之前, 那么估计jdk/jre下默认的logger实现将接管日志打印,因此logging.properties中的配置就失效了,因此也产生不出localhost等文件了



Sorry, the comment form is closed at this time.