首页主机资讯Ubuntu Tomcat日志分割与归档方法

Ubuntu Tomcat日志分割与归档方法

时间2025-11-20 23:40:04发布访客分类主机资讯浏览269
导读:Ubuntu Tomcat日志分割与归档方法 一 方案总览与选择 下表对比三种常用方案,便于按场景选择: 方案 适用场景 优点 注意点 logrotate 系统自带、最小改动、对运行中进程安全 配置简单、可压缩与保留策略、...

Ubuntu Tomcat日志分割与归档方法

一 方案总览与选择

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

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

  • 创建配置文件 /etc/logrotate.d/tomcat,示例:
/path/to/tomcat/logs/catalina.out {

    copytruncate
    daily
    rotate 15
    compress
    missingok
    size 200M
    dateext
}
    
  • 关键参数说明:
    • copytruncate:先复制再清空,适配持续写入的 catalina.out(与 create 互斥)。
    • daily / size 200M:满足任一条件即轮转。
    • rotate 15:保留最近 15 个归档。
    • compress:使用 gzip 压缩旧日志。
    • missingok:日志缺失不报错。
    • dateext:归档名追加日期后缀,便于检索。
  • 测试与生效:
    • 手动触发一次轮转:sudo logrotate -f /etc/logrotate.d/tomcat
    • 验证:ls -lh /path/to/tomcat/logs/ 应出现类似 catalina.out-2025-11-20.gz 的文件。
  • 说明:Ubuntu 的 logrotate/etc/cron.daily/logrotate 每日定时执行,无需额外定时任务。

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

  • 安装 cronolog(若仓库无包,可源码安装):
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
  • 修改 $CATALINA_HOME/bin/catalina.sh
    • 设置输出文件名格式(两处需要修改,Tomcat 7/8 位置略有差异):
if [ -z "$CATALINA_OUT" ] ;
     then
  CATALINA_OUT="$CATALINA_BASE/logs/catalina.%Y-%m-%d.out"
fi
  • 注释创建空文件的行:# touch "$CATALINA_OUT"
  • 将启动行改为管道输出到 cronolog(两处):
org.apache.catalina.startup.Bootstrap "$@" start 2>
    &
    1 \
  | /usr/local/sbin/cronolog "$CATALINA_OUT" >
    >
     /dev/null &
    
  • 重启 Tomcat 后,日志将按日期生成,如 catalina.2025-11-20.out
  • 清理旧日志(示例保留 7 天):
find /path/to/tomcat/logs -name "catalina.*.out" -mtime +7 -delete
  • 提示:cronolog 方式天然按时间切分,通常不再需要 logrotate 对 catalina.out 做轮转。

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

  • 适用前提:将 Tomcat 的 JULI 日志重定向到 Log4j2,或直接由应用使用 Log4j2
  • 依赖与配置步骤(示例):
    • log4j-core-2.x.jarlog4j-api-2.x.jartomcat-juli-adapters.jar 放入 $CATALINA_HOME/lib,并配置 $CATALINA_HOME/conf/logging.properties 使用 JULI-to-Log4j2 桥接,或在启动脚本中指定 Log4j2 配置文件。
    • $CATALINA_HOME/conf/log4j2.xml 中配置基于时间与大小的滚动策略(示例):
<
    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>
    
  • catalina.sh 添加 JVM 参数(如使用外部配置):
JAVA_OPTS="$JAVA_OPTS -Dlog4j.configurationFile=$CATALINA_BASE/conf/log4j2.xml"
export JAVA_OPTS
  • 重启 Tomcat 后,将按天与大小滚动并压缩归档,保留 20 个历史文件。

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

  • 归档策略:
    • 短期保留在本地 7–15 天并压缩,长期可结合脚本打包后上传至对象存储或备份服务器(示例打包并清理 7 天前日志):
#!/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
  • 将脚本加入 crontab,如每周日凌晨执行:0 2 * * 0 /usr/local/bin/backup_tomcat_logs.sh
  • 运维要点:
    • 分割方式选择:优先用 cronolog/Log4j2 做“源头切分”;若不便改动启动脚本,使用 logrotate + copytruncate 更稳妥。
    • 避免直接删除正在写入的 catalina.out,可能导致句柄异常;使用 > catalina.out 清空或采用 copytruncate。
    • 权限与属主:确保 Tomcat 用户对日志目录与文件具备写权限(如 640 root adm 或对应运行用户)。
    • 监控与告警:对日志目录设置磁盘使用率告警,定期抽检归档完整性与可读性。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu Tomcat日志分割与归档方法
本文地址: https://pptw.com/jishu/752599.html
Ubuntu Tomcat日志中的并发问题探讨 Ubuntu Tomcat日志中的慢查询分析

游客 回复需填写必要信息