Skip to content

tomcat 日志分割

cronolog 分割 tomcat 的 catalina.out 文件。cronolog 官网地址

  1. 编译安装 cronolog

    shell
    wget https://files.cnblogs.com/files/crazyzero/cronolog-1.6.2.tar.gz
    tar zxvf cronolog-1.6.2.tar.gz 
    cd cronolog-1.6.2
    ./configure 
    make && make install
  2. 查看 cronolog 安装后所在目录(验证安装是否成功)

    shell
    which cronolog
    一般情况下显示为:/usr/local/sbin/cronolog
  3. 编辑 tomcat 目录 bin 下的 catalina.sh 文件, 找到下面这行,类似这样的行有 2 处:

    sh
    # 修改前
    org.apache.catalina.startup.Bootstrap "$@" start \
          >> "$CATALINA_OUT" 2>&1 &
    # 修改后
    org.apache.catalina.startup.Bootstrap "$@" start \
    2>&1 | /usr/local/sbin/cronolog /usr/local/tomcat/logs/icatalina.%Y-%m-%d.out >>/dev/null &
  4. 注释此行:touch “$CATALINA_OUT ",如果不好使就把整个 if 注释掉,如下图为修改后的结果

    image-20250717145136787

    sh
    # 以下大概是 tomcat 目录 bin 下的 catalina.sh 文件的第 470 行的数据,修改后的结果
     shift
      #if [ -z "$CATALINA_OUT_CMD " ] ; then
      #  touch "$CATALINA_OUT "
      #else
      #  if [ ! -e "$CATALINA_OUT " ]; then
      #    if ! mkfifo "$CATALINA_OUT "; then
      #      echo " cannot create named pipe $CATALINA_OUT. Start aborted."
      #      exit 1
      #    fi
      #  elif [ ! -p "$CATALINA_OUT " ]; then
      #    echo "$CATALINA_OUT exists and is not a named pipe. Start aborted."
      #    exit 1
      #  fi
      #  $CATALINA_OUT_CMD <"$ CATALINA_OUT " &
      #fi
      if [ "$1" = "-security" ] ; then
        if [ $have_tty -eq 1 ]; then
          echo "Using Security Manager"
        fi
        shift
        eval $_NOHUP "\"$_RUNJAVA\"" "\"$CATALINA_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_OUT" >> /dev/null &
    
      else
        eval $_NOHUP "\"$_RUNJAVA\"" "\"$CATALINA_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_OUT" >> /dev/null &
    
      fi
  5. 然后重启 tomcat,查看日志结果。