Tomcat連携
このページでは、Tomcat固有の設定オプションと動作を説明します。
動作の仕組み
組み込みサーバーとしてTomcatを使用する場合、スターターはすべてのHTTPリクエストとレスポンスをインターセプトするTomcatValveを登録します。
Tomcat固有のプロパティ
logback:
access:
tomcat:
# 未設定時、RemoteIpValveの存在から自動判定
request-attributes-enabled: trueリクエスト属性
request-attributes-enabledがtrueの場合、以下のTomcatリクエスト属性が利用可能になります:
| 属性 | 説明 |
|---|---|
org.apache.catalina.AccessLog.RemoteAddr | クライアントIPアドレス |
org.apache.catalina.AccessLog.RemoteHost | クライアントホスト名 |
org.apache.catalina.AccessLog.Protocol | HTTPプロトコルバージョン |
org.apache.catalina.AccessLog.ServerName | サーバー名 |
org.apache.catalina.AccessLog.ServerPort | サーバーポート |
これらの属性はリバースプロキシの背後で使用する場合に便利です。
パターン変数
標準のパターン変数についてははじめに — パターン変数を参照してください。
標準変数に加えて、TomcatはRemoteIpValveが設定するすべてのリクエスト属性をサポートします(例: %{org.apache.catalina.AccessLog.RemoteAddr}r)。request-attributes-enabledがtrueの場合、これらの属性はリバースプロキシの背後にある実際のクライアント情報を反映します。
経過時間
%Dと%Tパターン変数はリクエスト処理時間を出力します。TomcatがAccessLog.log(request, response, time)コントラクトでナノ秒単位の値を直接提供する場合、スターターはミリ秒に変換して使用します。値が利用できない場合は、リクエスト開始時刻から計算します。
リバースプロキシの背後での使用
プロキシ(nginx、Apache、ロードバランサー)の背後で動作する場合、RemoteIpValveを設定して実際のクライアントIPを取得します:
server:
tomcat:
remoteip:
remote-ip-header: X-Forwarded-For
protocol-header: X-Forwarded-ProtoアクセスログにはプロキシのIPではなく、実際のクライアントIPが表示されます。
ローカルポート戦略
ログに記録するポートを制御:
logback:
access:
local-port-strategy: server # または 'local'server: サーバーポートを使用(例: 8080)local: ローカル接続ポートを使用
Spring Security連携
Spring Securityがクラスパスにある場合、スターターは認証済みユーザー名を自動的にキャプチャします(Servletアプリケーション限定):
<pattern>%h %l %u [%t] "%r" %s %b</pattern>%u変数の表示:
- 認証済みリクエスト: ユーザー名
- 匿名リクエスト:
-
注記: Servletベースのアプリケーション(Spring MVC)にのみ適用されます。リアクティブアプリケーション(Tomcat上のSpring WebFlux)では
%uは-を表示します。
設定例
本番Tomcat向けの完全な設定例:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<springProperty name="appName" source="spring.application.name"
defaultValue="app" scope="context"/>
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/access.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/access.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%h %l %u [%t] "%r" %s %b "%i{Referer}" "%i{User-Agent}" %D</pattern>
</encoder>
</appender>
<appender-ref ref="file"/>
</configuration>アプリケーションプロパティ:
logback:
access:
tomcat:
request-attributes-enabled: true
filter:
exclude-url-patterns:
- /actuator/.*
- /health
- /favicon.ico