知識庫 / Spring / Spring Boot RSS 訂閱

Spring Boot 內嵌 Tomcat 日誌

Logging,Spring Boot
HongKong
4
01:22 PM · Dec 06 ,2025

1. 簡介

Spring Boot 附帶嵌入式 Tomcat 服務器,非常方便。但是,默認情況下我們無法查看 Tomcat 的日誌。

在本教程中,我們將學習如何通過一個示例應用程序配置 Spring Boot 以顯示 Tomcat 的內部日誌和訪問日誌。

2. 示例應用程序

首先,我們創建一個 REST API。我們將定義一個 GreetingsController 來向用户問候:

@GetMapping("/greetings/{username}")
public String getGreetings(@PathVariable("username") String userName) {
    return "Hello " + userName + ", Good day...!!!";
}

3. Tomcat 日誌類型

嵌入式 Tomcat 存儲兩種類型的日誌:

  • 訪問日誌
  • 內部服務器日誌

訪問日誌 記錄了應用程序處理的所有請求的記錄。 這些日誌可用於跟蹤諸如頁面訪問次數和用户會話活動等信息。 與此形成對比,內部服務器日誌 將幫助我們解決正在運行的應用程序中的任何問題。

4. 訪問日誌

默認情況下,訪問日誌未啓用。

可以通過在 application.properties 中添加一個屬性輕鬆啓用它們:

server.tomcat.accesslog.enabled=true

同樣,我們也可以使用 VM 參數來啓用訪問日誌:

java -jar -Dserver.tomcat.basedir=tomcat -Dserver.tomcat.accesslog.enabled=true app.jar

這些日誌文件將在臨時目錄中創建。例如,在 Windows 系統上,訪問日誌目錄可能類似於 AppData\Local\Temp\tomcat.2142886552084850151.40123\logs

4.1. 格式

因此,啓用此屬性後,我們的應用程序中將看到類似以下內容:

0:0:0:0:0:0:0:1 - - [13/May/2019:23:14:51 +0530] "GET /greetings/Harry HTTP/1.1" 200 27
0:0:0:0:0:0:0:1 - - [13/May/2019:23:17:23 +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


%l – 用户的身份


%u – 通過 HTTP 身份驗證確定的用户名


%t – 請求接收時間


%r – 客户端請求行,在本例中為 GET /greetings/Harry HTTP/1.1


%>s – 服務器向客户端發送的狀態碼,例如 200


%b – 響應的大小,或針對這些請求的 27


由於此請求未進行身份驗證,因此 %l 和 %u 打印了短橫線。


事實上,如果缺少任何信息,Tomcat 會為該位置打印短橫線。

4.2. 自定義訪問日誌

我們可以通過在 application.properties 中添加少量屬性來覆蓋默認的 Spring Boot 配置。

首先,要更改默認的日誌文件名:

server.tomcat.accesslog.suffix=.log
server.tomcat.accesslog.prefix=access_log
server.tomcat.accesslog.file-date-format=.yyyy-MM-dd

此外,我們還可以更改日誌文件的位置:

server.tomcat.basedir=tomcat
server.tomcat.accesslog.directory=logs

最後,我們可以覆蓋日誌寫入方式,使其寫入日誌文件的方式發生改變:

server.tomcat.accesslog.pattern=common

此外,Spring Boot 中還有一些可配置的 屬性

5. 內部日誌

Tomcat 服務器的內部日誌對於解決任何服務器端問題都非常有幫助。

要查看這些日誌,我們需要在 application.properties 中添加以下日誌配置:

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.279 DEBUG 31160 --- [io-40124-exec-1] m.m.MbeansDescriptorsIntrospectionSource : Introspected attribute virtualHost public java.lang.String org.apache.coyote.RequestInfo.getVirtualHost() null
...
2019-05-17 15:41:07.280 DEBUG 31160 --- [io-40124-exec-1] o.a.tomcat.util.modeler.BaseModelMBean   : preRegister org.apache.coyote.RequestInfo@1e6f89ad Tomcat:type=RequestProcessor,worker="http-nio-40124",name=HttpRequest1
2019-05-17 15:41:07.292 DEBUG 31160 --- [io-40124-exec-1] org.apache.tomcat.util.http.Parameters   : Set query string encoding to UTF-8
2019-05-17 15:41:07.294 DEBUG 31160 --- [io-40124-exec-1] o.a.t.util.http.Rfc6265CookieProcessor   : Cookies: Parsing b[]: jenkins-timestamper-offset=-19800000
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. 結論

在本文中,我們學習了 Tomcat 內部日誌和訪問日誌之間的區別。此外,我們還了解了如何啓用和自定義這些日誌。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.