一、定位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注入、暴力破解)。