一、定位Tomcat日志配置文件
Tomcat的日志配置主要分布在两个核心文件中:
conf/logging.properties
:负责Java Util Logging(JULI)框架的日志级别、处理器(控制台/文件)、格式及滚动策略配置;conf/server.xml
:通过AccessLogValve
组件配置访问日志(记录HTTP请求详情,如IP、方法、路径、状态码等)。logging.properties
是排查问题的关键,因为它涵盖了应用、容器、Tomcat组件的运行日志。二、调整日志级别,聚焦关键信息
日志级别决定了日志的详细程度,合理设置可过滤无关信息,突出错误和异常。Tomcat日志级别从高到低分为:SEVERE
(最高,严重错误)、WARNING
(警告)、INFO
(常规信息)、CONFIG
(配置信息)、FINE
(详细调试)、FINER
(更详细)、FINEST
(最低,最详细)。
logging.properties
中的.level
参数(默认INFO
),如需更详细的排查信息,可设置为FINE
,但会增加日志量;org.apache.catalina.core.ContainerBase
控制容器日志、org.apache.coyote
控制HTTP连接器日志、com.yourapp
控制应用自定义日志),例如:org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = FINE org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.FileHandler
此配置会将localhost
容器的日志级别设为FINE
,并输出到localhost.log
文件。三、配置日志处理器,分离不同类型日志
Tomcat通过处理器(Handler)将日志输出到不同目标(控制台、文件),需合理配置以避免日志混乱:
java.util.logging.ConsoleHandler.level = INFO java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
directory
:日志存储目录(如${catalina.base}/logs
,即Tomcat安装目录下的logs
文件夹);prefix
:日志文件前缀(如catalina.
,生成catalina.2025-09-30.log
);suffix
:日志文件后缀(可选,如.log
);fileDateFormat
:日期格式(用于日志滚动,如yyyy-MM-dd
,每天生成一个新文件);maxDays
:保留日志的最大天数(如30
,自动删除30天前的日志);1catalina.org.apache.juli.FileHandler.level = INFO 1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 1catalina.org.apache.juli.FileHandler.prefix = catalina. 1catalina.org.apache.juli.FileHandler.fileDateFormat = yyyy-MM-dd 1catalina.org.apache.juli.FileHandler.maxDays = 30
此配置会将catalina
日志按日期分割,每天生成一个新文件,并保留30天。四、设置日志滚动策略,避免日志膨胀
当日志文件过大时,会影响Tomcat性能并占用大量磁盘空间。需通过以下参数控制日志滚动:
java.util.logging.FileHandler.limit
:单个日志文件的最大大小(单位:字节,如10485760
=10MB);java.util.logging.FileHandler.count
:保留的旧日志文件数量(如7
,保留最近7个日志文件);fileDateFormat
:按日期滚动(如yyyy-MM-dd
,每天生成一个新文件);maxDays
:日志保留天数(如30
,自动删除30天前的日志)。1catalina.org.apache.juli.FileHandler.level = INFO 1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 1catalina.org.apache.juli.FileHandler.prefix = catalina. 1catalina.org.apache.juli.FileHandler.limit = 10485760 1catalina.org.apache.juli.FileHandler.count = 7 1catalina.org.apache.juli.FileHandler.fileDateFormat = yyyy-MM-dd 1catalina.org.apache.juli.FileHandler.maxDays = 30
此配置会每天生成一个catalina.yyyy-MM-dd.log
文件,每个文件最大10MB,保留最近7个文件(共70MB),超过30天的文件自动删除。
五、配置访问日志,记录HTTP请求详情
访问日志用于记录客户端对Tomcat的HTTP请求(如IP地址、请求方法、请求路径、响应状态码、响应时间),是排查性能问题和安全事件的重要依据。需通过server.xml
配置:
<Host>
标签(通常位于server.xml
的<Engine>
内),添加AccessLogValve
组件:<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"" />
关键参数说明: directory
:访问日志存储目录(如logs
,生成localhost_access_log.2025-09-30.txt
);prefix
:日志文件前缀(如localhost_access_log
);suffix
:日志文件后缀(如.txt
);pattern
:日志格式(常用common
或combined
,也可自定义);pattern
解析:%h
(客户端IP)、%l
(远程登录名,通常-
)、%u
(认证用户,通常-
)、%t
(请求时间)、%r
(请求行,如GET /index.html HTTP/1.1
)、%s
(响应状态码,如200
)、%b
(响应大小,字节)、%{Referer}i
(来源页面)、%{User-Agent}i
(客户端浏览器信息)。tail -f logs/localhost_access_log.txt
实时查看。六、使用日志分析工具,提升排查效率
当日志量较大时,手动查看效率低下,可使用以下工具进行分析:
grep "ERROR" logs/catalina.out
查找所有错误日志,awk '{print $1, $4, $7}' logs/access_log.txt
提取访问日志的IP、时间和请求路径)。七、常见问题排查技巧
catalina.out
或localhost.log
中的SEVERE
级别日志,常见原因包括web.xml
语法错误、依赖包缺失、端口占用;catalina.out
中的OutOfMemoryError
日志,调整JVM参数(如-Xms512m -Xmx1024m
增加堆内存),并检查内存泄漏(如未关闭的数据库连接);%D
参数记录响应时间,pattern="%h %l %u %t "%r" %s %b %D"
),定位耗时较长的请求;404
错误、403
禁止访问),识别潜在的攻击行为(如SQL注入、暴力破解)。