Tomcat在Linux上的日志管理技巧
Tomcat的日志默认存储在$CATALINA_HOME/logs目录(如/usr/local/tomcat/logs),常见文件包括:
catalina.out:主日志文件,记录启动、运行及错误信息;localhost.log:本地主机相关日志;manager.log/host-manager.log:管理应用日志;access_log.txt:HTTP访问日志(需通过server.xml配置)。cd $CATALINA_HOME/logs进入目录,使用ls查看具体文件。logrotate是Linux系统自带的日志管理工具,可自动完成日志轮转、压缩、删除,避免日志文件过大。
/etc/logrotate.d/tomcat文件,添加以下内容(根据实际路径调整):/usr/local/tomcat/logs/catalina.out {
daily # 每天轮转
rotate 7 # 保留7天日志
compress # 压缩旧日志(如catalina.out.1.gz)
missingok # 日志丢失不报错
notifempty # 日志为空不轮转
copytruncate # 截断原日志,无需重启Tomcat
}
/usr/local/tomcat/logs/*.log {
daily
rotate 30
compress
missingok
notifempty
}
logrotate -d /etc/logrotate.d/tomcat,无错误则生效;logrotate -f /etc/logrotate.d/tomcat(强制立即轮转);logrotate默认由系统cron每日执行(查看/etc/cron.daily/logrotate)。通过修改conf/logging.properties文件,可调整日志级别(减少不必要的日志)和输出格式:
org.apache.catalina.level从INFO改为WARNING或ERROR,减少常规信息输出:org.apache.catalina.level = WARNING
java.util.logging.FileHandler.level = FINE
java.util.logging.FileHandler.pattern = ${catalina.base}/logs/tomcat.%g.log
java.util.logging.FileHandler.limit = 10000000 # 10MB
java.util.logging.FileHandler.count = 5
修改后需重启Tomcat使配置生效。通过server.xml中的AccessLogValve记录HTTP访问日志,支持轮转和保留策略:
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log"
suffix=".txt"
rotatable="true" # 启用轮转
maxDays="30" # 保留30天
pattern="%h %l %u %t "%r" %s %b" />
%h:客户端IP;%r:请求行;%s:状态码;%b:发送字节数;rotatable="true"配合maxDays可实现自动删除旧日志。Tomcat 8+支持异步日志(AsyncFileHandler),减少日志写入对主线程的影响:
logging.properties,将ConsoleHandler替换为AsyncFileHandler:handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler
.handlers = 1catalina.org.apache.juli.AsyncFileHandler
异步日志通过缓冲区批量写入,提升高并发场景下的性能。若无法使用logrotate,可通过Shell脚本定期清理旧日志:
clear_tomcat_logs.sh):#!/bin/bash
LOG_DIR="/usr/local/tomcat/logs"
find "$LOG_DIR" -name "catalina.*.log" -mtime +7 -exec rm -f {} \; # 删除7天前的catalina日志
find "$LOG_DIR" -name "*.gz" -mtime +30 -exec rm -f {} \; # 删除30天前的压缩日志
> "$LOG_DIR/catalina.out" # 清空当前catalina.out
crontab -e添加0 3 * * * /path/to/clear_tomcat_logs.sh,每天凌晨3点执行。对于大规模日志,可使用ELK Stack(Elasticsearch+Logstash+Kibana)或Grafana进行集中管理、可视化分析:
catalina.out、access_log.txt),解析并发送至Elasticsearch;