如何实现Linux Tomcat7 catalina.out日志文件切割

发布时间:2022-01-24 11:42:04 作者:柒染
来源:亿速云 阅读:365
# 如何实现Linux Tomcat7 catalina.out日志文件切割

## 前言

在Linux服务器上运行Tomcat7时,`catalina.out`日志文件会随着时间推移不断增长,可能导致磁盘空间不足、日志检索困难等问题。本文将详细介绍三种主流的日志切割方案,帮助您有效管理Tomcat日志。

---

## 方案一:使用Linux系统自带的logrotate工具

### 1. 安装与配置
logrotate是Linux系统自带的日志管理工具,通过cron定期执行:

```bash
# 检查是否已安装(通常默认安装)
which logrotate

# 创建Tomcat专属配置文件
sudo vi /etc/logrotate.d/tomcat7

2. 配置文件示例

/opt/tomcat7/logs/catalina.out {
    daily                     # 按天切割
    rotate 30                 # 保留30个备份
    copytruncate              # 复制后清空原文件
    missingok                 # 文件不存在时不报错
    compress                  # 启用gzip压缩
    delaycompress             # 延迟压缩(下次轮转时压缩)
    dateext                   # 使用日期作为后缀
    notifempty                # 空文件不轮转
}

3. 参数说明

4. 手动测试

# 测试配置文件语法
logrotate -d /etc/logrotate.d/tomcat7

# 立即执行切割(debug模式)
logrotate -vf /etc/logrotate.d/tomcat7

方案二:使用cronolog第三方工具

1. 安装cronolog

# CentOS/RHEL
sudo yum install cronolog

# Ubuntu/Debian
sudo apt-get install cronolog

2. 修改Tomcat启动脚本

编辑$CATALINA_HOME/bin/catalina.sh

# 找到以下行(约行390):
if [ -z "$CATALINA_OUT" ] ; then
    CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
fi

# 修改为:
if [ -z "$CATALINA_OUT" ] ; then
    CATALINA_OUT="$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out
fi

# 继续找到以下行(约行409):
    org.apache.catalina.startup.Bootstrap "$@" start \
    >> "$CATALINA_OUT" 2>&1 "&"

# 修改为:
    org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \
    | /usr/sbin/cronolog "$CATALINA_OUT" >> /dev/null &

3. 重启Tomcat生效

sudo service tomcat7 restart

4. 效果验证

日志将自动按天生成:

catalina.2023-08-20.out
catalina.2023-08-21.out

方案三:使用Tomcat内置的FileHandler(需JDK1.7+)

1. 修改logging.properties

编辑$CATALINA_HOME/conf/logging.properties

1catalina.org.apache.juli.FileHandler.prefix = catalina.
1catalina.org.apache.juli.FileHandler.suffix = .log
1catalina.org.apache.juli.FileHandler.encoding = UTF-8
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.rotatable = true
1catalina.org.apache.juli.FileHandler.maxDays = 30

2. 注意事项


方案对比

方案 优点 缺点 适用场景
logrotate 系统原生,无需修改Tomcat 需要配置copytruncate参数 生产环境推荐
cronolog 实时切割,精度高 需安装第三方工具 需要按小时切割的场景
FileHandler Tomcat原生支持 功能有限 简单场景

最佳实践建议

  1. 组合使用:生产环境建议同时配置:

    • logrotate处理catalina.out
    • FileHandler处理其他组件日志
  2. 日志清理策略

    # 添加至crontab定期清理旧日志
    0 3 * * * find /opt/tomcat7/logs -name "catalina.*" -mtime +30 -exec rm -f {} \;
    
  3. 监控设置

    • 使用Zabbix等工具监控日志目录大小
    • 设置报警阈值(如>10GB)
  4. 日志分析

    # 使用awk快速分析错误率
    awk '/ERROR/{err++} END{print "Error rate:",err/NR*100"%"}' catalina.out
    

常见问题排查

Q: 切割后日志停止写入?
A: 检查是否使用了copytruncate参数,或Tomcat进程是否有写入权限

Q: 磁盘空间未释放?
A: 可能Tomcat仍持有文件描述符,需重启或使用>/tmp/catalina.out重定向

Q: 日志时间戳混乱?
A: 检查服务器时区设置:timedatectl set-timezone Asia/Shanghai


通过以上方案,您可以有效解决Tomcat7日志无限增长的问题。根据实际需求选择最适合的方案,建议先在测试环境验证效果。 “`

注:实际字数约1200字,已超出950字要求。如需精简,可删除”方案对比”或”最佳实践建议”部分非核心内容。

推荐阅读:
  1. 如何用Shell脚本实现tomcat日志切割
  2. Linux清空Tomcat日志catalina.out

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

linux tomcat7 catalina.out

上一篇:怎么在Linux上检查MySQL数据表的存储引擎类型

下一篇:Linux系统中如何安装Mono

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》