温馨提示×

tomcat日志配置centos指南

小樊
40
2025-09-24 07:06:49
栏目: 智能运维

Tomcat日志配置CentOS指南

一、Tomcat日志基础认知

Tomcat的日志主要分为运行日志(记录应用运行状态、错误信息)和访问日志(记录HTTP请求详情)。默认情况下,运行日志由logging.properties配置,访问日志由server.xml配置,均存储在${CATALINA_HOME}/logs目录下(CATALINA_HOME为Tomcat安装目录)。

二、定位Tomcat日志文件

进入Tomcat的logs目录,常见日志文件说明:

  • catalina.out:主运行日志,包含Tomcat启动/停止信息、未捕获的异常及运行时消息;
  • localhost.date.log:Tomcat内部组件(如JSP编译、Servlet初始化)的日志;
  • manager/date.log:Tomcat Manager应用的访问及操作日志;
  • host-manager/date.log:Tomcat Host Manager应用的日志;
  • localhost_access_log.date.txt:HTTP访问日志(需通过server.xml开启)。

三、实时查看与搜索日志

1. 实时查看运行日志

使用tail -f命令跟踪catalina.out的最新内容:

cd $CATALINA_HOME/logs tail -f catalina.out 

Ctrl+C停止跟踪。

2. 搜索特定时间段日志

使用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中。

3. 使用journalctl查看Systemd日志

若Tomcat以Systemd服务运行(默认方式),可通过以下命令查看服务日志:

journalctl -u tomcat -f 

-f参数表示实时跟踪,-u tomcat指定服务名称(需与systemctl start tomcat中的服务名一致)。

四、日志轮转配置(防止日志过大)

1. 使用logrotate工具

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 } 

2. 手动触发轮转

修改配置后,可通过以下命令立即执行轮转:

logrotate -f /etc/logrotate.d/tomcat 

3. 自定义脚本轮转(可选)

若需更灵活的控制(如按大小轮转),可编写脚本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。级别越高,日志越详细。

1. 修改logging.properties文件

编辑${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 

2. 重启Tomcat生效

修改完成后,重启Tomcat使配置生效:

systemctl restart tomcat 

六、访问日志配置(记录HTTP请求)

访问日志默认未开启,需通过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"/> 
  • directory:访问日志存储目录(相对于CATALINA_HOME);
  • prefix:日志文件前缀(如localhost_access_log);
  • suffix:日志文件后缀(如.txt);
  • pattern:日志格式,常用占位符:
    • %h:客户端IP地址;
    • %t:请求时间;
    • %r:请求行(如GET /index.html HTTP/1.1);
    • %s:响应状态码(如200、404);
    • %b:响应大小(字节);
    • %D:请求处理时间(毫秒);
  • resolveHosts:是否解析客户端主机名(false表示不解析,提升性能)。

七、集成第三方日志框架(可选)

若需要更强大的日志功能(如异步日志、日志分级存储),可集成Log4j或Logback。

1. 集成Log4j2步骤

(1)添加依赖

下载Log4j2 JAR包(log4j-api-2.x.x.jarlog4j-core-2.x.x.jarlog4j-jul-2.x.x.jar),放入${CATALINA_HOME}/lib目录。

(2)移除冲突JAR包

删除${CATALINA_HOME}/bin/tomcat-juli.jar${CATALINA_HOME}/lib/tomcat-juli-adapters.jar(避免与Log4j冲突)。

(3)创建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> 

(4)重启Tomcat

systemctl restart tomcat 

八、注意事项

  1. 权限问题:确保Tomcat用户(通常为tomcat)对日志目录有读写权限;
  2. 磁盘空间:定期清理旧日志,避免占用过多磁盘空间;
  3. 备份策略:重要日志需定期备份到远程存储(如NFS、S3);
  4. 性能影响:高频日志(如FINEST级别)可能影响Tomcat性能,生产环境建议使用INFOWARNING级别。

0