Resinの機能を利用してHTTPリクエストの詳細をログに出力する

このCookBookでは、Resinの設定変更のみでHTTPリクエストの詳細をログに出力する方法について説明します。

HTTPリクエストの詳細をログに出力すると以下のような情報が確認できます。

  • リクエストヘッダーの内容
  • レスポンスヘッダーの内容

etc.

設定方法

Resinのresin.xmlにLogger設定を追記します。

【注意】 HTTPリクエスト詳細ログは、大量に出力されるため、HTTPリクエスト詳細ログ用のログファイル(log/http.log)に出力するようにしています。

      <!-- HTTPリクエスト詳細ログはたくさん出力されるため、別のログファイルに出力 --> 
      <log-handler name="com.caucho.server.http" level="all" path="log/http.log"
                     timestamp="[%y-%m-%d %H:%M:%S.%s]"
                     format="   {${thread}} ${log.level}    ${log.name} ${log.message}"/>

      <!-- HTTPリクエスト詳細ロガー設定(log/http.log のみに出力するようにしておく)-->
      <logger name="com.caucho.server.http" level="finest" use-parent-handlers="false"/>

ログ出力イメージ

ログを出力する設定を行うと、log/http.log に以下のようなログが出力されます。

// /login リクエストおよびレスポンスの内容

{resin-port-8080-138}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 1] GET /imart/login HTTP/1.1
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 1] Remote-IP: 0:0:0:0:0:0:0:1:51549
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 1] Host: localhost:8080
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 1] Connection: keep-alive
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 1] sec-ch-ua: "Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134"
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 1] sec-ch-ua-mobile: ?0
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 1] sec-ch-ua-platform: "Windows"
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 1] Upgrade-Insecure-Requests: 1
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 1] User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 1] Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 1] Sec-Fetch-Site: none
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 1] Sec-Fetch-Mode: navigate
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 1] Sec-Fetch-User: ?1
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 1] Sec-Fetch-Dest: document
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 1] Accept-Encoding: gzip, deflate, br, zstd
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 1] Accept-Language: ja,zh-CN;q=0.9,zh;q=0.8,en-US;q=0.7,en;q=0.6,ne;q=0.5
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 1] Cookie: im_first_login=0
{resin-port-8080-138}   FINE    com.caucho.server.http.Form query: im_mark=8-yihbm5*-za6nn9
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpResponse Http[app-0, 1] HTTP/1.1 200 OK
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpResponse Http[app-0, 1] Pragma: no-cache
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpResponse Http[app-0, 1] Cache-Control: no-store
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpResponse Http[app-0, 1] x-jp-co-intra-mart-ajaxsubmit-message-key: 8hjp9r0ip7y99yy
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpResponse Http[app-0, 1] Set-Cookie: JSESSIONID=cbe97919-e2ab-4c9e-b92a-1d36d1ac1ce2; path=/imart/; HttpOnly
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpResponse Http[app-0, 1] Set-Cookie: JSESSIONID_VERSION=1; path=/imart/; HttpOnly
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpResponse Http[app-0, 1] Content-Type: text/html; charset=UTF-8
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpResponse Http[app-0, 1] Transfer-Encoding: chunked
{resin-port-8080-138}   FINER   com.caucho.server.http.HttpResponseStream   Http[app-0, 1] write-next-buffer(7794)
{resin-port-8080-138}   FINER   com.caucho.server.http.HttpResponseStream   Http[app-0, 1] write-set-offset(402)
{resin-port-8080-138}   FINER   com.caucho.server.http.HttpResponseStream   Http[app-0, 1] write-set-offset(758)
{resin-port-8080-138}   FINER   com.caucho.server.http.HttpResponseStream   Http[app-0, 1] write-set-offset(6339)
{resin-port-8080-138}   FINER   com.caucho.server.http.HttpResponseStream   Http[app-0, 1] write-next-buffer(6331)
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpResponseStream   Http[app-0, 1] flush()
{resin-port-8080-138}   FINE    com.caucho.server.http.HttpResponseStream   Http[app-0, 1] flush()

// /certification リクエストおよびレスポンスの内容

{resin-port-8080-141}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 6] POST /imart/certification HTTP/1.1
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 6] Remote-IP: 0:0:0:0:0:0:0:1:51602
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 6] Host: localhost:8080
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 6] Connection: keep-alive
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 6] Content-Length: 204
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 6] Cache-Control: max-age=0
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 6] sec-ch-ua: "Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134"
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 6] sec-ch-ua-mobile: ?0
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 6] sec-ch-ua-platform: "Windows"
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 6] Origin: http://localhost:8080
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 6] Content-Type: application/x-www-form-urlencoded
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 6] Upgrade-Insecure-Requests: 1
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 6] User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 6] Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 6] Sec-Fetch-Site: same-origin
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 6] Sec-Fetch-Mode: navigate
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 6] Sec-Fetch-User: ?1
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 6] Sec-Fetch-Dest: document
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 6] Referer: http://localhost:8080/imart/login
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 6] Accept-Encoding: gzip, deflate, br, zstd
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 6] Accept-Language: ja,zh-CN;q=0.9,zh;q=0.8,en-US;q=0.7,en;q=0.6,ne;q=0.5
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpRequest  Http[app-0, 6] Cookie: JSESSIONID=8dcf4289-1e6e-49c9-8772-dc8dd64971c1; JSESSIONID_VERSION=2; im_first_login=0
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpResponse Http[app-0, 6] HTTP/1.1 200 OK
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpResponse Http[app-0, 6] Pragma: No-Cache
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpResponse Http[app-0, 6] Cache-Control: No-Cache
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpResponse Http[app-0, 6] Set-Cookie: jp.co.intra_mart.session.cookie=11tsyv83|1742383802801; path=/imart; HttpOnly
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpResponse Http[app-0, 6] Set-Cookie: JSESSIONID=e990419f-185e-4fec-b250-66fc67b82d54; path=/imart/; HttpOnly
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpResponse Http[app-0, 6] Set-Cookie: JSESSIONID_VERSION=1; path=/imart/; HttpOnly
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpResponse Http[app-0, 6] Content-Type: text/html; charset=UTF-8
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpResponse Http[app-0, 6] Content-Length: 148
{resin-port-8080-141}   FINER   com.caucho.server.http.HttpResponseStream   Http[app-0, 6] write-set-offset(564)
{resin-port-8080-141}   FINE    com.caucho.server.http.HttpResponseStream   Http[app-0, 6] finish/keepalive