リクエストログ¶
リクエストログには、アプリケーションサーバのリクエスト・レスポンスに関連する情報が出力されます。リクエストの処理が終了した際(=レスポンスを返却する直前)に「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
出力パターン¶
利用可能なパターン文字列¶
利用可能な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 ○ ログ出力時のアカウントコンテキストのテナント IDintra-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.RemoteAddressResolverDelegatejp.co.intra_mart.system.http.address.resolver.impl.HostNameConsciousRemoteAddressResolverByInetAddressDetectorintra-mart Accel Platform 2015 Summer(Karen) 以前の場合
リモートアドレス : HttpServletRequest#getRemoteAddr() の 値。リモートホスト : HttpServletRequest#getRemoteHost() の 値。