linux 下 使用cronolog对Tomcat 输出catalina.out 日志按照自定义日期格式进行切割 亲测可用

Posted 威威dett

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux 下 使用cronolog对Tomcat 输出catalina.out 日志按照自定义日期格式进行切割 亲测可用相关的知识,希望对你有一定的参考价值。

在Linux系统下,tomcat日志默认输出到catalina.out,随着时间的推移,catalina.out会持续增大,不方便管理和查询。

本文将介绍如何用 cronolog工具进行日志按日期分割,亲测可用

linux环境 centos7.3.1611 (Core) 
cronolog版本 cronolog-1.6.2
tomcat版本 Apache Tomcat/8.5.40

linux版本查看命令参考
tomcat版本查看命令参考

1.选择合适的目录下载并解压缩cronolog,依次执行如下命令

[root@call ~]# wget  https://files.cnblogs.com/files/crazyzero/cronolog-1.6.2.tar.gz
[root@call ~]# tar xf cronolog-1.6.2.tar.gz 
[root@call ~]# cd cronolog-1.6.2

2.安装cronolog,依次执行如下命令

[root@call cronolog-1.6.2]# ./configure 
[root@call cronolog-1.6.2]# make
[root@call cronolog-1.6.2]# make install 

提醒: 如需自定义安装目录,如:安装到/opt/cronolog,可做如下命令配置
(默认在/usr/local/sbin/cronolog

./configre # –prefix=/opt/cronolog 

执行完之后以上3个命令,如果一切正常,则代表安装成功,验证安装是否成功

which cronolog

我使用是默认目录
显示的安装路径/usr/local/sbin/cronolog

3.配置tomcat,打开tomcat目录下bin/catalina.sh文件

1.加井号#注释掉 touch "$CATALINA_OUT"这一句
2.找到类似下方的代码(有两处):

 org.apache.catalina.startup.Bootstrap "$@" start \\
      >> "$CATALINA_OUT" 2>&1 "&"

替换成:

org.apache.catalina.startup.Bootstrap "$@" start 2>&1 | /usr/local/sbin/cronolog "$CATALINA_BASE"/logs/catalina.out.%Y-%m-%d.log >> /dev/null &

注意: 使用的安装路径不要错了,我使用的是默认路径/usr/local/sbin/cronolog,不一样的需要改一下

修改后的样式

....省略上面的代码.....
  shift
  #touch "$CATALINA_OUT" #这里就是修改的部分
  if [ "$1" = "-security" ] ; then
    if [ $have_tty -eq 1 ]; then
      echo "Using Security Manager"
    fi
    shift
    eval $_NOHUP "\\"$_RUNJAVA\\"" "\\"$LOGGING_CONFIG\\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \\
      -D$ENDORSED_PROP="\\"$JAVA_ENDORSED_DIRS\\"" \\
      -classpath "\\"$CLASSPATH\\"" \\
      -Djava.security.manager \\
      -Djava.security.policy=="\\"$CATALINA_BASE/conf/catalina.policy\\"" \\
      -Dcatalina.base="\\"$CATALINA_BASE\\"" \\
      -Dcatalina.home="\\"$CATALINA_HOME\\"" \\
      -Djava.io.tmpdir="\\"$CATALINA_TMPDIR\\"" \\
      org.apache.catalina.startup.Bootstrap "$@" start 2>&1 | /usr/local/sbin/cronolog "$CATALINA_BASE"/logs/catalina.out.%Y-%m-%d.log >> /dev/null &

  else
    eval $_NOHUP "\\"$_RUNJAVA\\"" "\\"$LOGGING_CONFIG\\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \\
      -D$ENDORSED_PROP="\\"$JAVA_ENDORSED_DIRS\\"" \\
      -classpath "\\"$CLASSPATH\\"" \\
      -Dcatalina.base="\\"$CATALINA_BASE\\"" \\
      -Dcatalina.home="\\"$CATALINA_HOME\\"" \\
      -Djava.io.tmpdir="\\"$CATALINA_TMPDIR\\"" \\
      org.apache.catalina.startup.Bootstrap "$@" start 2>&1 | /usr/local/sbin/cronolog "$CATALINA_BASE"/logs/catalina.out.%Y-%m-%d.log >> /dev/null &
  fi
  .....省略下面的代码....

4.配置完成后,重启tomcat就可以了,会在logs目录生成一个新命名的文件

------------------------------------------------------分割线----------------------------------------------------

提示: 如果配置完想要立马方便测试一下是否能每天生成一个文件,上面配置的是每天生成一个log文件,这里我们可以设置成每分钟生成一个log文件,方便观察效果,测试完之后在改回来就可以了

只需修改上面配置的2个地方就行

参数修改前

/logs/catalina.out.%Y-%m-%d.log 

参数修改后

/logs/catalina.out.%Y-%m-%d-%H-%M.log 

改完后最终的样子

  org.apache.catalina.startup.Bootstrap "$@" start 2>&1 | /usr/local/sbin/cronolog "$CATALINA_BASE"/logs/catalina.out.%Y-%m-%d-%H-%M.log >> /dev/null &

cronolog 的语法介绍和使用方式参考
参考博文 https://www.cnblogs.com/crazyzero/p/7435691.html
参考博文 https://www.linuxidc.com/Linux/2016-07/133539.htm

另外一种方法,百度过程中看到,就是在catalina.sh文件中,直接修改如下地方的公共值

参考如下博文说是错误的不可用,有兴趣的可以看看 https://blog.csdn.net/weixin_40703574/article/details/95180220

if [ -z "$CATALINA_OUT" ] ; then
  CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
fi

以上是关于linux 下 使用cronolog对Tomcat 输出catalina.out 日志按照自定义日期格式进行切割 亲测可用的主要内容,如果未能解决你的问题,请参考以下文章

tomcat日志自动分割(linux)cronolog

Linux下用cronolog切割Tomcat日志并删除指定天数前的日志记录

Linux系统下分割tomcat日志

CentOS下安装cronolog拆分tomcat日志文件catalina.out

Tomcat的日志分割三种方法

Linux下使用cronolog切割服务器日志文件的方法