为了更加安全,生产环境中我更加青睐把tomcat 使用 jsvc 以守护进程的方式启动(daemon.sh )。这样tomcat自身将会生成另外一个日志文件(catalina-daemon.out),而不是之前的catalina.out。但是随之出现2个问题:1.catalina-daemon.out这个文件不会自动切割,而且会无线增大。2.catalina-daemon.out里面log输出等级无法更改,大量info信息占据了磁盘。为了针对这两个问题特意研究了一番,研究过程因功力尚浅所以并不专业,敬请谅解。


一.catalina-daemon.out自动切割问题。

    第一时间看到这个问题,首先想到的是类似于nginx的log切割方法。于是从daemon.sh里找到了它输出的路径,大约在136行。

test ".$CATALINA_OUT" = . && CATALINA_OUT="$CATALINA_BASE/logs/catalina-daemon.out"

可以直接更改到我们指定的目录下,并且用时间方式命名

test ".$CATALINA_OUT" = . && CATALINA_OUT="/XXX/catalina-daemon%Y-%m-%d.out"

但是使用这种方式每次更改需要重新启动tomcat才会生效。tomcat不像nginx拥有平滑重启的功能,每次重启都需要重新加载项目会直接导致项目中断,并不适合线上环境使用,故而pass掉。


    于是百度了一下,但是并没有发现太好的解决办法。网上更多的是通过通过cronlog这个工具对catalina.out这个文件进行分割,死马当活马医于是尝试了一下仿照使用,把文件更改为

test ".$CATALINA_OUT" = . && CATALINA_OUT="|/usr/local/sbin/cronolog $CATALINA_BASE/logs/catalina-daemon%Y-%m-%d.out"

但是并没有生效,不知道是不