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.*

踩坑提醒

  • 默认访问日志目录在系统临时文件夹中,不方便查找,建议手动配置 basedirdirectory
  • 日志级别建议只在调试阶段开启 DEBUG,上线后应改为 INFOWARN
  • 如果日志格式不符合预期,可自定义 pattern 字段,支持 commoncombined 等格式

希望本文能帮助你在 Spring Boot 项目中更好地配置 Tomcat 日志,方便排查问题和监控服务运行状态。


原始标题:Spring Boot Embedded Tomcat Logs | Baeldung