Common Log Format
伝統的な host ident authuser date request status bytes
形式のログ出力です。
以下のような出力となります。
127.0.0.1 user-identifier frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
Apache では httpd.conf
で以下のように定義されています。
LogFormat "%h %l %u %t \"%r\" %>s %b" common CustomLog logs/access_log common
Tomcat の server.xml
ではデフォルトで common
が使われています。
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="common" />
Spring Boot でも以下がデフォルトとなります。
server.tomcat.accesslog.pattern=common # Format pattern for access logs.
通常は、これでは情報が足りないので、以下に示す combined
が使われることが多いです。
Combined Log Format
Apache では httpd.conf
で以下のように定義されています。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined CustomLog log/access_log combined
common
の末尾に HTTP ヘッダの Referer と User-Agent を加えた形式です。
Nginx のデフォルトは combined
で以下のような定義になっています。
log_format combined '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';
ロードバランサ配下にWebサーバを配備した場合は、combined
に加えて追加情報を出力すべきです。
カスタム Log Format
リバースプロキシの裏のWebサーバでは、host をログ出力しても、プロキシのIPアドレスが出力されてしまいます。
この場合は通常、プロキシが HTTP ヘッダに X-Forwarded-For
としてクライアントアドレスを設定するので、Apache の場合以下のように定義することでクライアントアドレスをログ出力することができます。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded CustomLog "logs/access_log" combined env=!forwarded CustomLog "logs/access_log" proxy env=forwarded
集計などはプロキシのログで行うとして、単に末尾に加えてもよいでしょう。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{X-Forwarded-For}i" main
Nginx の場合は以下のようになります。
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
アプリケーションサーバの場合はさらに付加情報を出しておくと便利です。
Tomcat の場合は("
によるエスケープで見にくいですが )以下のようになります。
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i" %{X-Forwarded-For}i %D %S %I" />
フォーマット文字 | 説明 |
---|---|
%h | リモートホスト |
%l | リモートログ名 |
%u | リモートユーザ |
%t | 日時 |
%r | リクエストメソッド |
%s | HTTPステータスコード |
%b | レスポンスサイズ(byte) |
"%{Referer}i" | リファラー(HTTPヘッダ) |
"%{User-Agent}i" | ユーザエージェント(HTTPヘッダ) |
%{X-Forwarded-For}i | X-Forwarded-For(HTTPヘッダ) |
%D | 処理時間(msec) |
%S | セッションID |
%I | スレッド名 |
その他は以下のリファレンスを参照してください。
Spring Boot で Tomcat 使う場合は以下のようになります。
server.tomcat.accesslog.pattern='%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i" %{X-Forwarded-For}i %D %S %I'