Skip to content

Tomcat連携

このページでは、Tomcat固有の設定オプションと動作を説明します。

動作の仕組み

組み込みサーバーとしてTomcatを使用する場合、スターターはすべてのHTTPリクエストとレスポンスをインターセプトするTomcatValveを登録します。

Tomcat固有のプロパティ

yaml
logback:
  access:
    tomcat:
      # 未設定時、RemoteIpValveの存在から自動判定
      request-attributes-enabled: true

リクエスト属性

request-attributes-enabledtrueの場合、以下のTomcatリクエスト属性が利用可能になります:

属性説明
org.apache.catalina.AccessLog.RemoteAddrクライアントIPアドレス
org.apache.catalina.AccessLog.RemoteHostクライアントホスト名
org.apache.catalina.AccessLog.ProtocolHTTPプロトコルバージョン
org.apache.catalina.AccessLog.ServerNameサーバー名
org.apache.catalina.AccessLog.ServerPortサーバーポート

これらの属性はリバースプロキシの背後で使用する場合に便利です。

パターン変数

標準のパターン変数についてははじめに — パターン変数を参照してください。

標準変数に加えて、TomcatはRemoteIpValveが設定するすべてのリクエスト属性をサポートします(例: %{org.apache.catalina.AccessLog.RemoteAddr}r)。request-attributes-enabledtrueの場合、これらの属性はリバースプロキシの背後にある実際のクライアント情報を反映します。

経過時間

%D%Tパターン変数はリクエスト処理時間を出力します。TomcatがAccessLog.log(request, response, time)コントラクトでナノ秒単位の値を直接提供する場合、スターターはミリ秒に変換して使用します。値が利用できない場合は、リクエスト開始時刻から計算します。

リバースプロキシの背後での使用

プロキシ(nginx、Apache、ロードバランサー)の背後で動作する場合、RemoteIpValveを設定して実際のクライアントIPを取得します:

yaml
server:
  tomcat:
    remoteip:
      remote-ip-header: X-Forwarded-For
      protocol-header: X-Forwarded-Proto

アクセスログにはプロキシのIPではなく、実際のクライアントIPが表示されます。

ローカルポート戦略

ログに記録するポートを制御:

yaml
logback:
  access:
    local-port-strategy: server  # または 'local'
  • server: サーバーポートを使用(例: 8080)
  • local: ローカル接続ポートを使用

Spring Security連携

Spring Securityがクラスパスにある場合、スターターは認証済みユーザー名を自動的にキャプチャします(Servletアプリケーション限定):

xml
<pattern>%h %l %u [%t] "%r" %s %b</pattern>

%u変数の表示:

  • 認証済みリクエスト: ユーザー名
  • 匿名リクエスト: -

注記: Servletベースのアプリケーション(Spring MVC)にのみ適用されます。リアクティブアプリケーション(Tomcat上のSpring WebFlux)では%u-を表示します。

設定例

本番Tomcat向けの完全な設定例:

xml
<?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>

アプリケーションプロパティ:

yaml
logback:
  access:
    tomcat:
      request-attributes-enabled: true
    filter:
      exclude-url-patterns:
        - /actuator/.*
        - /health
        - /favicon.ico

関連ページ

Released under the Apache 2.0 License.