Debian上Tomcat日志管理指南
Tomcat的日志文件默认存放在**/var/log/tomcat/(若通过apt安装)或/opt/tomcat/logs/**(若手动下载解压安装)目录下,主要包含以下几类:
使用logrotate工具实现日志自动轮转(压缩、删除旧日志),配置文件位于**/etc/logrotate.d/tomcat**,内容示例如下:
/var/log/tomcat/*.log {
    daily                # 每天轮转一次
    rotate 7             # 保留最近7天的日志
    compress             # 压缩旧日志(如catalina.out.1.gz)
    delaycompress        # 延迟压缩(当前日志不下次轮转时才压缩)
    missingok            # 日志文件不存在时不报错
    notifempty           # 日志为空时不轮转
    create 640 tomcat tomcat  # 新日志文件的权限和所有者
    sharedscripts        # 所有日志轮转完成后执行postrotate
    postrotate
        /bin/kill -HUP `cat /var/run/tomcat.pid 2>/dev/null` 2>/dev/null || true  # 重启Tomcat以释放日志句柄
    endscript
}
说明:sharedscripts和postrotate确保所有日志文件轮转完成后再重启Tomcat,避免日志丢失。
Tomcat使用JULI(Java Util Logging Interface)作为日志框架,通过conf/logging.properties文件调整日志级别(级别从低到高:FINEST→FINER→FINE→CONFIG→INFO→WARNING→SEVERE→OFF):
# 全局日志级别(默认INFO)
.level = INFO
# 控制台日志处理器(输出到catalina.out)
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
# 文件日志处理器(输出到catalina.YYYY-MM-DD.log)
1catalina.org.apache.juli.AsyncFileHandler.level = INFO
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.formatter = java.util.logging.SimpleFormatter
# 特定包的日志级别(如org.apache.catalina.core调整容器日志)
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = FINE
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = java.util.logging.ConsoleHandler
说明:将org.apache.catalina.core设置为FINE可捕获更详细的容器启动、请求处理日志,生产环境建议设为WARNING或INFO以减少磁盘占用。
访问日志默认关闭,需通过conf/server.xml文件开启,添加或取消注释以下内容:
<Valve className="org.apache.catalina.valves.AccessLogValve" 
       directory="logs" 
       prefix="localhost_access_log" 
       suffix=".txt" 
       pattern="%h %l %u %t "%r" %s %b" 
       resolveHosts="false"/>
参数说明:
directory:访问日志存放目录(相对于Tomcat安装目录);prefix:日志文件前缀(如localhost_access_log);suffix:日志文件后缀(如.txt);pattern:日志格式(常用common或combined,也可自定义);resolveHosts:是否解析客户端主机名(false表示直接记录IP)。常见pattern格式:
%h:客户端IP地址;%r:HTTP请求行(如GET /index.html HTTP/1.1);%s:响应状态码(如200、404);%b:发送的字节数(不包括HTTP头);%{User-Agent}i:客户端浏览器信息。使用tail命令实时查看日志文件(如catalina.out):
tail -f /var/log/tomcat/catalina.out
说明:-f参数表示持续跟踪日志新增内容,Ctrl+C退出。
使用grep命令过滤特定关键字(如“error”):
grep "error" /var/log/tomcat/catalina.out
说明:可结合-i(忽略大小写)、-A 5(显示匹配行后5行)等参数增强过滤效果。
使用less命令分页查看日志文件(适合大文件):
less /var/log/tomcat/catalina.out
说明:按空格翻页,/keyword搜索关键字,q退出。
对于大规模日志,可使用ELK Stack(Elasticsearch+Logstash+Kibana)或Graylog实现日志集中管理、可视化分析(如统计请求量、定位错误趋势)。
若未使用logrotate,可通过以下脚本手动备份和清理日志:
#!/bin/bash
LOG_PATH="/opt/tomcat/logs"  # 日志目录
BACKUP_PATH="/home/user/backups"  # 备份目录
DATE=$(date +%Y-%m-%d)
cp "$LOG_PATH/catalina.out" "$BACKUP_PATH/catalina.out.$DATE.log"
find "$LOG_PATH" -name "catalina.*.log" -mtime +30 -exec rm -rf {} \;  # 删除30天前的日志
说明:将日志文件复制到备份目录,并删除30天前的旧日志。
chmod +x /path/to/backup_tomcat_logs.sh  # 赋予执行权限
crontab -e  # 编辑定时任务
添加以下内容(每天凌晨0点执行备份):
0 0 * * * /path/to/backup_tomcat_logs.sh