Tomcat的日志主要分为运行日志(记录应用运行状态、错误信息)和访问日志(记录HTTP请求详情)。默认情况下,运行日志由logging.properties配置,访问日志由server.xml配置,均存储在${CATALINA_HOME}/logs目录下(CATALINA_HOME为Tomcat安装目录)。
进入Tomcat的logs目录,常见日志文件说明:
server.xml开启)。使用tail -f命令跟踪catalina.out的最新内容:
cd $CATALINA_HOME/logs tail -f catalina.out 按Ctrl+C停止跟踪。
使用sed命令截取指定时间范围的日志(例如2025-09-01至2025-09-02):
sed -n "/2025-09-01/,/2025-09-02/p" catalina.out > /tmp/tomcat_specific_logs.txt 将结果保存到/tmp/tomcat_specific_logs.txt中。
若Tomcat以Systemd服务运行(默认方式),可通过以下命令查看服务日志:
journalctl -u tomcat -f -f参数表示实时跟踪,-u tomcat指定服务名称(需与systemctl start tomcat中的服务名一致)。
Tomcat默认的日志轮转配置文件位于/etc/logrotate.d/tomcat,编辑该文件调整规则(示例):
/var/log/tomcat/catalina.out { daily # 每天轮转 rotate 7 # 保留最近7天的日志 compress # 压缩旧日志(生成.gz文件) missingok # 若日志文件不存在也不报错 notifempty # 若日志为空则不轮转 create 0640 tomcat tomcat # 创建新日志文件,权限0640,属主属组为tomcat postrotate /bin/kill -HUP `cat /var/run/tomcat.pid` 2>/dev/null || true # 通知Tomcat重新打开日志文件 endscript } 修改配置后,可通过以下命令立即执行轮转:
logrotate -f /etc/logrotate.d/tomcat 若需更灵活的控制(如按大小轮转),可编写脚本tomcatLog.sh:
#!/bin/bash DIR="/opt/tomcat/logs" LOGS="$DIR/catalina.out" DATE=$(date +%Y-%m-%d) BACKUP_FILE="$DIR/catalina.$DATE.bak" ARCHIVE_FILE="$DIR/catalina.$DATE.tar.gz" if [ -d "$DIR" ]; then cd "$DIR" cp "$LOGS" "$BACKUP_FILE" # 备份原日志 tar -czf "$ARCHIVE_FILE" "$BACKUP_FILE" # 压缩备份 rm -f "$BACKUP_FILE" # 删除备份文件 > "$LOGS" # 清空原日志 else echo "Directory does not exist: $DIR" fi 赋予执行权限并添加定时任务(每天凌晨2点执行):
chmod +x $DIR/tomcatLog.sh crontab -e # 添加以下行 0 2 * * * $DIR/tomcatLog.sh Tomcat使用java.util.logging框架,日志级别从低到高为:SEVERE > WARNING > INFO > CONFIG > FINE > FINER > FINEST。级别越高,日志越详细。
编辑${CATALINA_HOME}/conf/logging.properties,调整以下配置:
# 全局日志级别(默认INFO) .level=INFO # 控制台日志级别(默认INFO) java.util.logging.ConsoleHandler.level=INFO java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter # 文件日志级别(默认INFO) java.util.logging.FileHandler.level=INFO java.util.logging.FileHandler.pattern=%h/tomcat/logs/app.%u.%g.log java.util.logging.FileHandler.limit=50000 # 单个日志文件最大50MB java.util.logging.FileHandler.count=10 # 保留10个备份文件 java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter # 特定组件的日志级别(如localhost) org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level=INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers=2localhost.org.apache.juli.AsyncFileHandler 修改完成后,重启Tomcat使配置生效:
systemctl restart tomcat 访问日志默认未开启,需通过server.xml配置。编辑${CATALINA_HOME}/conf/server.xml,找到<Host>标签,添加或修改AccessLogValve配置:
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b %D" resolveHosts="false"/> CATALINA_HOME);localhost_access_log);.txt);%h:客户端IP地址;%t:请求时间;%r:请求行(如GET /index.html HTTP/1.1);%s:响应状态码(如200、404);%b:响应大小(字节);%D:请求处理时间(毫秒);false表示不解析,提升性能)。若需要更强大的日志功能(如异步日志、日志分级存储),可集成Log4j或Logback。
下载Log4j2 JAR包(log4j-api-2.x.x.jar、log4j-core-2.x.x.jar、log4j-jul-2.x.x.jar),放入${CATALINA_HOME}/lib目录。
删除${CATALINA_HOME}/bin/tomcat-juli.jar和${CATALINA_HOME}/lib/tomcat-juli-adapters.jar(避免与Log4j冲突)。
在${CATALINA_HOME}/lib目录下创建log4j2.xml,示例配置:
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/> </Console> <RollingFile name="File" fileName="${catalina.base}/logs/app.log" filePattern="${catalina.base}/logs/app-%d{yyyy-MM-dd}.log.gz"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/> <Policies> <TimeBasedTriggeringPolicy interval="1" modulate="true"/> </Policies> <DefaultRolloverStrategy max="7"/> </RollingFile> </Appenders> <Loggers> <Root level="INFO"> <AppenderRef ref="Console"/> <AppenderRef ref="File"/> </Root> </Loggers> </Configuration> systemctl restart tomcat tomcat)对日志目录有读写权限;FINEST级别)可能影响Tomcat性能,生产环境建议使用INFO或WARNING级别。