1. Tomcat 日志概述
Spring Boot 默认自带了内嵌的 Tomcat 服务器,非常方便。但默认情况下,我们是看不到 Tomcat 的内部日志和访问日志的。
本文将通过一个简单的示例项目,演示如何在 Spring Boot 中启用并自定义 Tomcat 的 访问日志(Access Logs) 和 内部日志(Internal Logs)。
2. 示例项目
首先,我们创建一个简单的 REST 接口,用于后续测试日志输出:
@RestController
public class GreetingsController {
@GetMapping("/greetings/{username}")
public String getGreetings(@PathVariable("username") String userName) {
return "Hello " + userName + ", Good day...!!!";
}
}
启动项目后,访问 http://localhost:8080/greetings/John
即可看到响应结果,为后续日志验证做准备。
3. Tomcat 日志类型
内嵌 Tomcat 主要包含两类日志:
- 访问日志(Access Logs):记录所有 HTTP 请求的基本信息,如客户端 IP、请求路径、响应状态码等。
- 内部日志(Internal Logs):Tomcat 自身运行过程中的调试信息,用于排查服务器内部问题。
两者的用途不同,因此配置方式也略有差异。
4. 访问日志配置
默认情况下,访问日志是关闭的。
✅ 启用访问日志
在 application.properties
中添加以下配置即可启用访问日志:
server.tomcat.accesslog.enabled=true
也可以通过启动参数启用:
java -jar -Dserver.tomcat.basedir=tomcat -Dserver.tomcat.accesslog.enabled=true app.jar
⚠️ 注意:日志文件默认生成在系统的临时目录下。例如在 Windows 上可能是:
AppData\Local\Temp\tomcat.1234567890123456789.8080\logs
📄 日志格式说明
默认访问日志格式如下:
0:0:0:0:0:0:0:1 - - [13/May/2019:23:14:51 +0530] "GET /greetings/Harry HTTP/1.1" 200 27
对应的格式字符串是:
%h %l %u %t \"%r\" %>s %b
含义如下:
标记 | 含义 |
---|---|
%h |
客户端 IP,例如 0:0:0:0:0:0:0:1 (IPv6 的 localhost) |
%l |
客户身份标识(通常为空) |
%u |
HTTP 认证用户名(未认证则为空) |
%t |
请求到达时间 |
%r |
请求行(如 GET /greetings/Harry HTTP/1.1 ) |
%>s |
响应状态码(如 200 ) |
%b |
响应内容大小(不含 HTTP 头) |
✅ 如果某个字段缺失,Tomcat 会用
-
表示。
🛠️ 自定义访问日志
你可以通过配置项来自定义日志格式、路径、文件名等信息:
# 文件名配置
server.tomcat.accesslog.prefix=access_log
server.tomcat.accesslog.suffix=.log
server.tomcat.accesslog.file-date-format=yyyy-MM-dd
# 日志目录配置
server.tomcat.basedir=tomcat
server.tomcat.accesslog.directory=logs
# 日志格式(可选值:common、combined 等)
server.tomcat.accesslog.pattern=common
✅ 更多配置项可参考 Spring Boot 官方文档
5. 内部日志配置
Tomcat 的内部日志主要用于排查服务器运行时的异常问题。
✅ 启用内部日志
在 application.properties
中添加以下配置即可启用 Tomcat 的 DEBUG 级别日志:
logging.level.org.apache.tomcat=DEBUG
logging.level.org.apache.catalina=DEBUG
📋 示例日志输出
启用后,你将看到类似如下的日志内容:
2019-05-17 15:41:07.261 DEBUG 31160 --- [0124-Acceptor-0] o.apache.tomcat.util.threads.LimitLatch : Counting up[http-nio-40124-Acceptor-0] latch=1
2019-05-17 15:41:07.262 DEBUG 31160 --- [0124-Acceptor-0] o.apache.tomcat.util.threads.LimitLatch : Counting up[http-nio-40124-Acceptor-0] latch=2
2019-05-17 15:41:07.278 DEBUG 31160 --- [io-40124-exec-1] org.apache.tomcat.util.modeler.Registry : Managed= Tomcat:type=RequestProcessor,worker="http-nio-40124",name=HttpRequest1
...
2019-05-17 15:41:07.296 DEBUG 31160 --- [io-40124-exec-1] o.a.c.authenticator.AuthenticatorBase : Security checking request GET /greetings/Harry
2019-05-17 15:41:07.296 DEBUG 31160 --- [io-40124-exec-1] org.apache.catalina.realm.RealmBase : No applicable constraints defined
这些日志可以帮助你分析请求处理流程、线程池状态、安全验证等底层细节。
6. 总结
本文我们介绍了 Spring Boot 内嵌 Tomcat 的两种日志类型:
日志类型 | 用途 | 配置方式 |
---|---|---|
Access Logs | 跟踪请求访问情况 | server.tomcat.accesslog.* |
Internal Logs | 排查 Tomcat 内部问题 | logging.level.org.apache.* |
✅ 踩坑提醒:
- 默认访问日志目录在系统临时文件夹中,不方便查找,建议手动配置
basedir
和directory
- 日志级别建议只在调试阶段开启
DEBUG
,上线后应改为INFO
或WARN
- 如果日志格式不符合预期,可自定义
pattern
字段,支持common
、combined
等格式
希望本文能帮助你在 Spring Boot 项目中更好地配置 Tomcat 日志,方便排查问题和监控服务运行状态。