ubuntu

Ubuntu Tomcat日志分割与归档方法

小樊
42
2025-11-20 08:25:24
栏目: 智能运维

Ubuntu Tomcat日志分割与归档方法

一 方案总览与选择

方案 适用场景 优点 注意点
logrotate 系统自带、最小改动、对运行中进程安全 配置简单、可压缩与保留策略、自动按日/大小触发 对持续写入的 catalina.out 建议使用 copytruncate,存在极小概率丢行
cronolog 希望按时间自动命名并持续滚动 按天/小时精准切分、无需额外清理脚本 需修改 catalina.sh 启动管道,注意 Tomcat 7/8 修改位置差异
Log4j2 滚动文件 使用 JULI 重定向或切换到 Log4j2 功能最灵活(时间+大小、保留策略、异步) 需引入依赖与配置,变更类加载器与日志框架

二 使用 logrotate 对 catalina.out 进行分割与归档

/path/to/tomcat/logs/catalina.out {
    copytruncate
    daily
    rotate 15
    compress
    missingok
    size 200M
    dateext
}

三 使用 cronolog 按时间分割 catalina.out

sudo apt-get update
sudo apt-get install -y cronolog
# 或源码安装(示例)
wget http://cronolog.org/download/cronolog-1.6.2.tar.gz
tar zxvf cronolog-1.6.2.tar.gz
cd cronolog-1.6.2
./configure && make && sudo make install
which cronolog  # 常见路径:/usr/local/sbin/cronolog
if [ -z "$CATALINA_OUT" ] ; then
  CATALINA_OUT="$CATALINA_BASE/logs/catalina.%Y-%m-%d.out"
fi
org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \
  | /usr/local/sbin/cronolog "$CATALINA_OUT" >> /dev/null &
find /path/to/tomcat/logs -name "catalina.*.out" -mtime +7 -delete

四 使用 Log4j2 实现按时间与大小滚动归档

<Configuration status="warn" packages="org.apache.logging.log4j.core">
  <Appenders>
    <RollingFile name="RollingFile"
                 fileName="/opt/tomcat/logs/catalina.log"
                 filePattern="/opt/tomcat/logs/catalina.%d{yyyy-MM-dd}-%i.log.gz">
      <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
      <Policies>
        <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        <SizeBasedTriggeringPolicy size="10MB"/>
      </Policies>
      <DefaultRolloverStrategy max="20"/>
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="info">
      <AppenderRef ref="RollingFile"/>
    </Root>
  </Loggers>
</Configuration>
JAVA_OPTS="$JAVA_OPTS -Dlog4j.configurationFile=$CATALINA_BASE/conf/log4j2.xml"
export JAVA_OPTS

五 归档与清理策略及运维建议

#!/usr/bin/env bash
LOG_DIR="/opt/tomcat/logs"
BAK_DIR="/backup/tomcat"
DATE=$(date +%Y%m%d)
tar -czf "$BAK_DIR/tomcat_logs_$DATE.tar.gz" -C "$LOG_DIR" catalina.*.log localhost_access_log.*.txt
find "$LOG_DIR" -name "catalina.*.log" -mtime +7 -delete
find "$LOG_DIR" -name "localhost_access_log.*.txt" -mtime +7 -delete

0
看了该问题的人还看了