centos

CentOS Tomcat日志如何高效管理

小樊
45
2025-10-21 22:49:13
栏目: 智能运维

一、定位Tomcat日志文件
Tomcat的日志文件默认存储在$CATALINA_HOME/logs目录下($CATALINA_HOME为Tomcat安装目录环境变量),主要包含以下类型:

二、实时查看与筛选日志

三、配置日志轮转(核心高效管理手段)
日志轮转可防止catalina.out等文件无限增长,避免磁盘空间耗尽。推荐使用系统自带的logrotate工具,步骤如下:

  1. 安装logrotate:若未安装,通过sudo yum install logrotate命令安装(CentOS默认已预装);
  2. 创建Tomcat专用配置文件:在/etc/logrotate.d/目录下新建tomcat文件(如sudo vi /etc/logrotate.d/tomcat);
  3. 添加轮转规则:配置文件内容示例如下(关键参数说明见下文):
    /usr/local/tomcat/logs/catalina.out {
        daily                # 每天轮转一次(可根据需求改为weekly/monthly)
        rotate 7             # 保留最近7个轮转文件(避免过多占用空间)
        compress             # 使用gzip压缩轮转后的文件(如catalina.out.1.gz)
        missingok            # 若日志文件不存在,不报错继续执行
        notifempty           # 若日志文件为空,不进行轮转
        copytruncate         # 复制原日志文件后清空内容(避免Tomcat写入锁定的问题)
    }
    
  4. 测试配置有效性:使用sudo logrotate -d /etc/logrotate.d/tomcat命令模拟执行,无错误提示则表示配置正确;
  5. 手动触发轮转:若需立即执行,使用sudo logrotate -f /etc/logrotate.d/tomcat-f表示强制);
  6. 自动执行:logrotate默认已加入系统cron任务(/etc/cron.daily/logrotate),无需额外配置,每日自动运行。

四、调整日志输出级别(减少无效日志)
通过修改Tomcat的日志配置文件,可降低不必要的日志输出,提升日志可读性:

  1. 修改logging.properties:进入$CATALINA_HOME/conf目录,编辑logging.properties文件,调整handlers的日志级别(如将FINE改为WARNINGOFF):
    handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
    .level = WARNING  # 全局日志级别(控制所有handler的输出阈值)
    1catalina.org.apache.juli.AsyncFileHandler.level = WARNING  # catalina日志级别
    java.util.logging.ConsoleHandler.level = WARNING           # 控制台输出级别
    
  2. 修改catalina.sh:在$CATALINA_HOME/bin/catalina.sh中,添加JAVA_OPTS参数限制日志输出(如export JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties -Dorg.apache.catalina.level=WARNING")。

五、自动化清理旧日志(补充方案)
若不想依赖logrotate的rotate参数,可通过shell脚本定期清理旧日志,步骤如下:

  1. 编写清理脚本:创建auto-del-old-tomcat-logs.sh文件(如/usr/local/tomcat/scripts/auto-del-old-tomcat-logs.sh),内容如下:
    #!/bin/bash
    LOG_DIR="/usr/local/tomcat/logs"  # 日志目录
    DAYS_TO_KEEP=30                   # 保留最近30天的日志
    find "$LOG_DIR" -name "*.log*" -type f -mtime +$DAYS_TO_KEEP -exec rm -f {} \;  # 删除超过30天的.log文件
    find "$LOG_DIR" -name "catalina.out.*" -type f -mtime +$DAYS_TO_KEEP -exec rm -f {} \;  # 删除catalina.out的旧备份
    
  2. 赋予执行权限chmod +x /usr/local/tomcat/scripts/auto-del-old-tomcat-logs.sh
  3. 添加定时任务:通过crontab -e命令添加每日凌晨2点执行的定时任务(如0 2 * * * /usr/local/tomcat/scripts/auto-del-old-tomcat-logs.sh)。

六、可选:使用Log4j替代默认日志框架(高级方案)
若默认的java.util.logging无法满足需求(如需要更灵活的日志格式、远程日志传输),可切换至Log4j:

  1. 准备jar包:下载log4j-1.2.17.jartomcat-juli.jartomcat-juli-adapters.jar(从Tomcat官网或Maven仓库获取);
  2. 放置jar包:将log4j-1.2.17.jar放入$CATALINA_HOME/lib目录,将tomcat-juli.jar复制到$CATALINA_HOME/bin目录并替换原文件;
  3. 修改配置文件:删除$CATALINA_HOME/conf/logging.properties,在lib目录下创建log4j.properties,配置日志输出(如滚动文件、控制台输出):
    log4j.rootLogger=INFO, file
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    log4j.appender.file.File=/usr/local/tomcat/logs/tomcat.log
    log4j.appender.file.MaxFileSize=10MB
    log4j.appender.file.MaxBackupIndex=10
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    
  4. 配置context.xml:在$CATALINA_HOME/conf/context.xml中添加swallowOutput="true",确保Tomcat的stdout/stderr被Log4j接管。

0
看了该问题的人还看了