intra-mart Accel Platform ログ仕様書 第12版 2019-12-01

リクエストログ

リクエストログには、アプリケーションサーバのリクエスト・レスポンスに関連する情報が出力されます。
リクエストの処理が終了した際(=レスポンスを返却する直前)に「INFO」レベルでログが出力され、リクエストを受け付けた時に「DEBUG」レベルでログが出力されます。
上記2つのタイミングで出力されるログを比較することにより、処理中の状態、つまり、リクエストを受け付けたが、レスポンスはまだ返却されていない状態であるリクエストを特定することが可能です。「リクエストを受け付けた時のログ」と「レスポンスを返却した時のログ」は、リクエスト ID で紐付けることが可能です。

注意

リクエストを受け付けたときのログを出力する場合はログレベルをDEBUG以下の重要度に設定する必要があります。

モジュール コアモジュール
設定場所 %CONTEXT_PATH%/WEB-INF/conf/log/im_logger_request.xml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<included>

  <!--
     - REQUEST_LOG
    -->
  <appender name="REQUEST_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${im.log}/platform/request.log</file>
    <append>true</append>

    <!--
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>
        ${im.log}/platform/request-%d{yyyy-MM-dd}.log
      </fileNamePattern>
    </rollingPolicy>
    -->

    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
      <fileNamePattern>${im.log}/platform/request%i.log</fileNamePattern>
      <minIndex>1</minIndex>
      <maxIndex>5</maxIndex>
    </rollingPolicy>

    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
      <maxFileSize>10MB</maxFileSize>
    </triggeringPolicy>

    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
      <layout class="jp.co.intra_mart.common.platform.log.layout.OutputStackTracePatternLayout">
        <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}]  [%thread]  %X{log.report.sequence}  %-5level  %logger{255}  %X{tenant.id}  %X{log.id}  -  %X{client.session.id}  %X{request.remote.host}  %X{request.method}  %X{request.url}  %X{request.query_string}  %X{request.url.referer}  %X{request.page.time}  %X{request.accept.time}  %X{request.id}%nopex%n</pattern>

        <enableOutputStackTrace>true</enableOutputStackTrace>
        <stackTraceDir>${im.log}/platform/exception/</stackTraceDir>
        <stackTraceFilename>'exception_'yyyy-MM-dd_HH-mm-ss'_%logId.log'</stackTraceFilename>
      </layout>
    </encoder>
  </appender>

  <logger name="REQUEST_LOG" additivity="false">
    <level value="info" />
    <appender-ref ref="REQUEST_FILE" />
  </logger>

</included>

標準出力設定

ログレベル(初期値) INFO
出力先(初期値)
コンソール
ファイル - ${im.log}/platform/request.log

出力パターン

利用可能なパターン文字列

リクエストログで利用可能なパターン文字列は以下の通りです。
パターン文字列については「パターン文字列」を参照してください。
フォーマット文字列 設定有無(初期値) 説明
%d 出力日時
%thread スレッド名
%level ログレベル
%logger ロガー名
%msg ×
リクエストを受け付けた時は IN レスポンスを返却した時は OUT が出力されます。
%X
利用可能なキーは「利用可能なMDCキー」を参照してください。

利用可能なMDCキー

リクエストログで利用可能なMDCのキーは以下の通りです。
MDCについては「MDC」を参照してください。
MDCキー 設定有無(初期値) 説明
log.thread.group × スレッドグループ
log.report.sequence ログ出力順序番号
log.id ログ ID
client.session.id セッション ID
request.remote.host
リモートホスト
intra-mart Accel Platform 2015 Winter(Lydia) で出力方式が変更されました。 詳しくは、後述のコラムを参照してください。
request.remote.address ×
リモートアドレス
intra-mart Accel Platform 2015 Winter(Lydia) で出力方式が変更されました。 詳しくは、後述のコラムを参照してください。
request.method HTTPメソッド
request.url リクエストURL
request.query_string クエリ文字列
request.url.referer リクエスト発生元URL
request.page.time ページ処理時間。ミリ秒で出力されます。
request.accept.time リクエストの受付時間。 [yyyy-MM-dd HH:mm:ss,SSS] 形式で出力されます。
request.id リクエスト ID
user.cd ×
ログ出力時のアカウントコンテキストのユーザコード
intra-mart Accel Platform 2014 Spring(Granada) 以降、利用可能です。
user.type ×
ログ出力時のアカウントコンテキストのユーザ種別
administrator : システム管理者
platform : ジョブなどのバックグラウンド
user : 一般ユーザ
intra-mart Accel Platform 2014 Spring(Granada) 以降、利用可能です。
tenant.id
ログ出力時のアカウントコンテキストのテナント ID
intra-mart Accel Platform 2014 Spring(Granada) 以降、利用可能です。
authenticated ×
ログ出力時のアカウントコンテキストの認証状態
true : 認証済み
false : 未認証
intra-mart Accel Platform 2014 Spring(Granada) 以降、利用可能です。

コラム

アカウントコンテキストの詳細については、「アカウントコンテキストのJavaDoc」を参照してください。

注意

リモートアドレス(request.remote.address)、および、リモートホスト(request.remote.host) の出力方式が変更されました。
  • intra-mart Accel Platform 2015 Winter(Lydia) 以降の場合

    リモートアドレス、リモートホスト 共に、 InetAddressDetector#getRemoteAddress() で取得した java.net.InetAddress#getHostAddress() の 値が設定されます。
    InetAddressDetector は、IPアドレス取得元設定 に従い、リクエストからリモートホストのIPアドレスを取得します。
    なお、リモートホストには IPアドレス が出力されます。(パフォーマンス向上のためにホスト名解決を行いません。)
    ホスト名解決を行いたい場合は、以下のサービス定義ファイルを追加してください。
    • %CONTEXT_PATH%/WEB-INF/classes/META-INF/services/jp.co.intra_mart.system.http.address.resolver.RemoteAddressResolverDelegate
      jp.co.intra_mart.system.http.address.resolver.impl.HostNameConsciousRemoteAddressResolverByInetAddressDetector
      
  • intra-mart Accel Platform 2015 Summer(Karen) 以前の場合

    リモートアドレス : HttpServletRequest#getRemoteAddr() の 値。
    リモートホスト  : HttpServletRequest#getRemoteHost() の 値。