Tomcat的日志文件默认存储在$CATALINA_HOME/logs目录下($CATALINA_HOME为Tomcat安装目录环境变量),主要包含以下类型:
tail -f命令跟踪日志文件的新增内容(如catalina.out),按Ctrl+C停止:cd $CATALINA_HOME/logs
tail -f catalina.out
sed命令截取指定时间范围的日志(如2025-10-01至2025-10-02):sed -n "/2025-10-01/,/2025-10-02/p" catalina.out > /tmp/tomcat_specific.log
tomcat.service),可使用journalctl查看实时日志:journalctl -u tomcat.service -f
日志轮转用于自动分割、压缩旧日志,推荐使用系统自带的logrotate工具:
/etc/logrotate.d/下创建tomcat文件,添加以下规则(以catalina.out为例):/var/log/tomcat/logs/catalina.out {
daily # 每天轮转
rotate 7 # 保留最近7份
compress # 压缩旧日志(如catalina.out.1.gz)
missingok # 若日志不存在不报错
notifempty # 若日志为空不轮转
copytruncate # 复制原日志后清空(避免重启Tomcat)
}
logrotate -f /etc/logrotate.d/tomcat
server.xml中配置AccessLogValve),可设置rotatable="true"和maxDays属性(如保留30天):<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log."
suffix=".txt"
rotatable="true"
maxDays="30"
pattern="%h %l %u %t "%r" %s %b" />
Tomcat使用java.util.logging框架,通过conf/logging.properties文件调整日志级别(级别从高到低:SEVERE>WARNING>INFO>CONFIG>FINE>FINER>FINEST):
handlers对应的处理器级别(如将catalina日志设为WARNING,减少不必要的信息):1catalina.org.apache.juli.FileHandler.level = WARNING
2localhost.org.apache.juli.FileHandler.level = WARNING
3manager.org.apache.juli.FileHandler.level = WARNING
4host-manager.org.apache.juli.FileHandler.level = WARNING
org.apache.catalina.startup)调整级别(如设为ERROR,仅记录错误信息):org.apache.catalina.startup.level = ERROR
systemctl restart tomcat
若需要更灵活的日志管理(如滚动策略、异步日志),可将Tomcat日志框架切换为Log4j:
log4j-1.2.17.jar、tomcat-juli.jar、tomcat-juli-adapters.jar,放入$CATALINA_HOME/lib目录;bin/tomcat-juli.jar替换为lib目录下的同名JAR;conf目录下创建log4j.properties文件,设置日志输出(如滚动文件、控制台):log4j.rootLogger = INFO, file
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File = /var/log/tomcat/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
conf/logging.properties文件。cron定时任务(如每天凌晨2点)删除超过30天的日志:0 2 * * * find /var/log/tomcat/logs -name "*.log.*" -mtime +30 -exec rm -f {} \;
AsyncAppender或Tomcat的AsyncFileHandler),减少I/O对主线程的影响;log4j或java.util.logging的Filter机制,过滤日志中的密码、密钥等敏感数据;