首页主机资讯Linux下Tomcat日志轮转策略

Linux下Tomcat日志轮转策略

时间2025-12-15 18:30:03发布访客分类主机资讯浏览485
导读:Linux下Tomcat日志轮转策略 一 常用方案与适用场景 logrotate 系统工具:适合绝大多数场景,配置简单、与系统定时任务集成,可同时管理 catalina.out 与按日期生成的 catalina.yyyy-mm-dd.lo...

Linux下Tomcat日志轮转策略

一 常用方案与适用场景

  • logrotate 系统工具:适合绝大多数场景,配置简单、与系统定时任务集成,可同时管理 catalina.out 与按日期生成的 catalina.yyyy-mm-dd.log 等文件。支持按天、按大小、压缩、保留份数、延迟压缩、日期后缀等策略。
  • cronolog 管道切割:通过修改 bin/catalina.sh,将标准输出交给 cronolog 按日期自动创建新文件,天然按天分割,无需后续轮转。
  • JULI + Log4j 方案:替换或增强 Tomcat 内建日志,使用 FileHandler.limit/count/pattern 或 Log4j 的 DailyRollingFileAppender 等实现按大小/按天滚动与保留策略。
  • Shell 脚本 + find 清理:作为补充手段,定期删除过期日志,适合清理历史归档或访问日志。
    以上方案可单独或组合使用,以满足“按天/按大小/保留N天/压缩归档”的合规与容量治理目标。

二 推荐方案 logrotate 配置示例

  • 针对 catalina.out(不中断写入,优先选用 copytruncate)
/opt/tomcat/logs/catalina.out {

    daily
    rotate 30
    size 100M
    copytruncate
    compress
    delaycompress
    missingok
    notifempty
    dateext
    dateformat -%Y-%m-%d
    create 0644 tomcat tomcat
}

  • 针对 按日期已分割的 catalina 日志(如 catalina.2025-12-15.log)
/opt/tomcat/logs/catalina.*.log {

    daily
    rotate 30
    compress
    missingok
    notifempty
    dateext
    dateformat -%Y-%m-%d
    sharedscripts
    postrotate
        # 可选:通知或重启相关进程;多数情况下无需重启
    endscript
}

  • 多实例通配(如 /opt/tomcat-*/logs/catalina.out
/opt/tomcat-*/logs/catalina.out {

    su root root
    daily
    rotate 15
    missingok
    dateext
    compress
    notifempty
    copytruncate
    size 20M
}
    
  • 调试与强制执行
    • 调试:logrotate -d /etc/logrotate.d/tomcat
    • 强制执行:logrotate -f /etc/logrotate.d/tomcat
      说明:系统通常通过 /etc/cron.daily/logrotate 每日调用 /usr/sbin/logrotate /etc/logrotate.conf 自动执行;如业务需要更频繁轮转,可在 crontab 中单独调度该配置。

三 cronolog 按日期切割 catalina.out

  • 安装(示例)
    • CentOS/RHEL:yum install -y cronolog
    • 或编译安装后确保可执行文件在 /usr/sbin/cronolog
  • 修改 bin/catalina.sh 中的启动行(有两处,需一致)
org.apache.catalina.startup.Bootstrap "$@" start 2>
    &
    1 \
  | /usr/sbin/cronolog "$CATALINA_BASE"/logs/catalina.out-%Y-%m-%d.log >
    >
     /dev/null &

  • 重启 Tomcat 后,将在 logs/ 下生成如 catalina.out-2025-12-15.log 的按日文件,后续无需再对 catalina.out 做轮转。
    提示:若之前有“touch catalina.out”等初始化,可按需注释,避免空文件干扰。

四 按大小或数量轮转的 JULI 与 Log4j 配置

  • JULI FileHandler(Tomcat 内建日志)
# 在 conf/logging.properties 中调整或新增
java.util.logging.FileHandler.limit = 10485760     # 10MB
java.util.logging.FileHandler.count = 10          # 保留10个
java.util.logging.FileHandler.pattern = /opt/tomcat/logs/catalina.%g.out
.handlers = java.util.logging.FileHandler
  • Log4j 1.x DailyRollingFileAppender(示例)
log4j.rootLogger=INFO, CATALINA
log4j.appender.CATALINA=org.apache.log4j.DailyRollingFileAppender
log4j.appender.CATALINA.File=/opt/tomcat/logs/catalina.log
log4j.appender.CATALINA.DatePattern='.'yyyy-MM-dd
log4j.appender.CATALINA.layout=org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.ConversionPattern=%d{
yyyy-MM-dd HH:mm:ss}
 %-5p %c{
1}
    :%L - %m%n
  • 使用 Log4j 接管 stdout/stderr 时,需在 conf/context.xml 设置 swallowOutput=“true”,并确保相关 JAR(如 tomcat-juli.jar、tomcat-juli-adapters.jar、log4j-*.jar)就位,再按需移除或调整 logging.propertiescatalina.sh 中的重定向。
    说明:JULI 的 limit/count 适合“按大小+数量”的滚动;Log4j 的 DailyRollingFileAppender 适合“按天”滚动。

五 运维要点与常见问题

  • 选择策略:对 catalina.out 优先用 copytruncate 以避免重启;对按日期生成的日志用 dateext 命名并配合 compress/delaycompress 节省空间。
  • 权限与属主:确保 create 指定的用户/组与 Tomcat 运行账号一致(如 tomcat:tomcat),避免轮转后无法写入。
  • 多实例管理:使用通配路径(如 /opt/tomcat-*/logs/)或在 /etc/logrotate.d/ 下为每个实例单独配置,便于差异化保留策略。
  • 清理历史归档:对访问日志或历史 catalina 文件,可用 find … -mtime +N -delete 定期清理,示例:
    • 0 2 * * * find /opt/tomcat-/logs -name 'localhost_access_log.’ -mtime +7 -delete
  • 避免重复切割:若已用 cronolog 按天生成文件,通常不再对同名文件做 logrotate 切割;可改为仅对归档做压缩与过期清理。
  • 验证与回滚:上线前用 logrotate -d 做语法与执行模拟,必要时 -f 强制演练;保留回滚方案与变更记录。

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


若转载请注明出处: Linux下Tomcat日志轮转策略
本文地址: https://pptw.com/jishu/771903.html
Ubuntu ulimit如何限制用户权限 Tomcat日志切割与归档方法

游客 回复需填写必要信息