<
tr><
td><
code>%{<
var>Foobar</
var>}i</
code></
td>
<
td>サーバに送られたリクエストの <
code><
var>Foobar</
var>:</
code>
<
tr><
td><
code>%l</
code></
td>
<
td>(identd からもし提供されていれば) リモートログ名。
これは <
module>mod_ident</
module> がサーバに存在して、
<
directive module="mod_ident">IdentityCheck</
directive>
ディレクティブが <
code>On</
code> に設定されていない限り、
<
code>-</
code> になります。</
td></
tr>
<
tr><
td><
code>%m</
code></
td>
<
tr><
td><
code>%{<
var>Foobar</
var>}n</
code></
td>
<
td>他のモジュールからのメモ <
var>Foobar</
var> の内容</
td></
tr>
<
tr><
td><
code>%{<
var>Foobar</
var>}o</
code></
td>
<
td>応答の <
code><
var>Foobar</
var>:</
code> ヘッダの内容</
td></
tr>
<
tr><
td><
code>%p</
code></
td>
<
td>リクエストを扱っているサーバの正式なポート</
td></
tr>
<
tr><
td><
code>%{<
var>format</
var>}p</
code></
td>
<
td>サーバがリクエストを処理しているポートの公式
<
transnote>canonical</
transnote> のポート番号か、
サーバの実際のポート番号か、クライアント側の実際のポート番号かです。
format に使える文字列は <
code>canonical</
code>, <
code>local</
code>,
<
code>remote</
code> になります。
<
tr><
td><
code>%P</
code></
td>
<
td>リクエストを扱った子プロセスのプロセス ID</
td></
tr>
<
tr><
td><
code>%{<
var>format</
var>}P</
code></
td>
<
td>リクエストを扱ったワーカーのプロセス ID かスレッド ID。
<
var>format</
var> として有効な値は <
code>pid</
code>, <
code>tid</
code>,
<
code>hextid</
code> です。<
code>hextid</
code> を使うには
<
tr><
td><
code>%q</
code></
td>
<
td>問い合せ文字列 (存在する場合は前に <
code>?</
code> が追加される。
<
tr><
td><
code>%r</
code></
td>
<
tr><
td><
code>%s</
code></
td>
<
td>ステータス。内部でリダイレクトされたリクエストは、元々の
リクエストのステータス --- 最後のステータスは <
code>%>s</
code>
<
tr><
td><
code>%t</
code></
td>
CLF の時刻の書式 (標準の英語の書式)</
td></
tr>
<
tr><
td><
code>%{<
var>format</
var>}t</
code></
td>
<
td><
var>format</
var> で与えられた書式による時刻。format は
<
code>strftime (3)</
code> の
書式である必要がある。(地域化されている可能性がある)</
td></
tr>
<
tr><
td><
code>%T</
code></
td>
<
td>リクエストを扱うのにかかった時間、秒単位</
td></
tr>
<
tr><
td><
code>%u</
code></
td>
<
td>リモートユーザ (認証によるもの。ステータス (<
code>%s</
code>) が
401 のときは意味がないものである可能性がある)
<
tr><
td><
code>%U</
code></
td>
<
td>リクエストされた URL パス。クエリ文字列は含まない</
td></
tr>
<
tr><
td><
code>%v</
code></
td>
<
td>リクエストを扱っているサーバの正式な <
directive module="core">ServerName</
directive></
td></
tr>
<
tr><
td><
code>%V</
code></
td>
<
td><
directive module="core" >UseCanonicalName</
directive> の設定によるサーバ名</
td></
tr>
<
tr><
td><
code>%X</
code></
td>
<
columnspec><
column width=".2"/><
column width=".6"/></
columnspec>
<
tr><
td><
code>X</
code> =</
td>
<
td>応答が完了する前に接続が異常終了</
td></
tr>
<
tr><
td><
code>+</
code> =</
td>
<
td>応答が送られた後に接続を持続することが可能</
td></
tr>
<
tr><
td><
code>-</
code> = </
td>
<
td>応答が送られた後に接続が切られる</
td></
tr>
1.3 の後期のバージョンでは <
code>%c</
code> に割り当てられて
いましたが、これは歴史的に ssl が使用している
<
code>%{<
var>var</
var>}c</
code>
構文と衝突していました。)</
p></
td></
tr>
<
tr><
td><
code>%I</
code></
td>
<
td>リクエストとヘッダを含む、受け取ったバイト数。
これを使用するためには <
module>mod_logio</
module> が必要</
td></
tr>
<
tr><
td><
code>%O</
code></
td>
<
td>ヘッダを含む、送信したバイト数。0 にはならない。
これを使用するためには <
module>mod_logio</
module> が必要</
td></
tr>
<
section id="modifiers"><
title>修飾子</
title>
<
p>特定の要素は "%" の直後に HTTP ステータスコードをカンマ区切りで
指定することで、表示を制限することができます。例えば
<
code>"%400,501{User-agent}i"</
code> では、
400 と 500 番エラーでのみ <
code>User-agent</
code> をログします。
他のステータスコードでは <
code>"-"</
code> という文字列が
ログされます。ステータスコードのリストは "<
code>!</
code>"
<
code>"%!200,304,302{Referer}i"</
code> は、指定された
3 つのコードの<
em>どれにも該当しない</
em>リクエスト全てで
<
code>Referer</
code> をログします。</
p>
<
p>修飾子 "<" と ">" は内部リダイレクトされたリクエストのログに
元のリクエストか最終的なリクエストのどちらを使用するかを
指定するために使います。デフォルトでは、<
code>%</
code> ディレクティブの
<
code>%s, %U, %T, %D, %r</
code> は元のリクエストを、他は最終的なリクエストを
使用します。例えば、リクエストの最終ステータスを記録するには
<
code>%>s</
code> を、内部的に認証されていないリソースへリダイレクトされた
リクエストで元のリクエストで認証されたユーザを記録するためには
<
code>%<u</
code> を使うことができます。</
p>
<
section id="format-notes"><
title>その他注意点</
title>
<
p>セキュリティ上の理由により 2.0.46 より、
<
code>%r</
code>, <
code>%i</
code>, <
code>%o</
code> に入っている、
印字不可能な文字と他の特別な文字は、<
code>\x<
var>hh</
var></
code>
という形式の文字列でエスケープされるようになりました。<
var>hh</
var> は
そのままのバイトの値の 16 進での値です。この規則の例外には、
バックスラッシュを使ってエスケープされる <
code>"</
code> と <
code>\</
code> と、
C 形式の表記法が使われる空白文字 (<
code>\n</
code>, <
code>\t</
code> など)
があります。2.0.46 以前のバージョンではエスケープ処理は行われませんので、
<
p>httpd 2.0 では 1.3 とは異なり、<
code>%b</
code> と <
code>%B</
code>
フォーマット文字列はクライアントに送信されたバイト数そのものではなく、
HTTP レスポンスのバイト数です (これらは異なるもので、たとえば、
コネクションが途中で破棄された場合や、SSL 使用時に一致しません) 。
<
module>mod_logio</
module> で提供されている <
code>%O</
code>
フォーマット文字列で、ネットワーク経由で実際に転送されたバイト数を
<
section id="examples"><
title>例</
title>
<
dt>Common Log Format (CLF)</
dt>
<
dd><
code>"%h %l %u %t \"%r\" %>s %b"</
code></
dd>
<
dt>バーチャルホスト付き Common Log Format</
dt>
<
dd><
code>"%v %h %l %u %t \"%r\" %>s %b"</
code></
dd>
<
dd><
code>"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"
\"%{User-agent}i\""</
code></
dd>
<
dd><
code>"%{Referer}i -> %U"</
code></
dd>
<
dt>Agent (ブラウザ) ログ書式</
dt>
<
dd><
code>"%{User-agent}i"</
code></
dd>
<
section id="security"><
title>セキュリティに関して</
title>
<
p>ログファイルが保存されているディレクトリがサーバを起動した以外のユーザで
書き込み可能なときにセキュリティの問題が発生する理由の詳細は<
a<
name>BufferedLogs</
name>
<
description>ディスクに書き出す前にメモリにログエントリをバッファする</
description>
<
syntax>BufferedLogs On|Off</
syntax>
<
default>BufferedLogs Off</
default>
<
contextlist><
context>server config</
context></
contextlist>
<
status>Experimental</
status>
<
compatibility>2.0.41 以降</
compatibility>
<
p><
directive>BufferedLogs</
directive> ディレクティブを使うと
<
module>mod_log_config</
module> の挙動が変化して、
複数のログを書き出す際に、それぞれのリクエスト処理後毎に
高いパフォーマンスの得られるシステムもあるでしょう。
このディレクティブはサーバ全体で一度だけ設定できます;
バーチャルホストごとに設定することはできません。</
p>
<
note>このディレクティブは実験的なものですので、
<
description>クッキングのロギングのためのファイル名を設定する</
description>
<
syntax>CookieLog <
var>filename</
var></
syntax>
<
contextlist><
context>server config</
context><
context>virtual host</
context>
<
compatibility>このディレクティブは非推奨</
compatibility>
<
p><
directive>CookieLog</
directive>
ディレクティブはクッキーのロギングのためのファイル名を
設定します。filename は <
directive module="core">ServerRoot</
directive>
からの相対パスです。このディレクティブは <
code >mod_cookies</
code> との互換性のためだけに
<
description>ログファイルの名前と書式を設定する</
description>
<
syntax>CustomLog <
var>file</
var>|<
var>pipe</
var>
<
var>format</
var>|<
var>nickname</
var>
[env=[!]<
var>environment-variable</
var>]</
syntax>
<
contextlist><
context>server config</
context><
context>virtual host</
context>
<
p><
directive>CustomLog</
directive> ディレクティブはサーバへのリクエストを
ログ収集するために使われます。ログの書式が指定され、
環境変数を使ってロギングが条件に応じて行なわれるようにすることもできます。</
p>
<
p>ログが書かれる場所を指定する最初の引数は以下の二つの形式の値を
<
dd><
directive module="core">ServerRoot</
directive>
<
dd>パイプ文字 "<
code>|</
code>" と、その後に標準入力からログの
<
note type="warning"><
title>セキュリティ</
title>
<
program>httpd</
program> が起動されたユーザとして実行されます。これはサーバが
root によって起動された場合は root になります。プログラムが
<
note type="warning"><
title>注</
title>
<
p>Unix でないプラットフォームでファイルのパスを入力しているときは、
使用しているプラットフォームがバックスラッシュの使用を許可していた
として、通常のスラッシュだけを使うように気をつけてください。
一般的に、設定ファイル中では常に普通のスラッシュのみを使うようにする
<
p>二つめの引数はログファイルに何が書かれるかを指定します。
module="mod_log_config">LogFormat</
directive> ディレクティブにより
定義された <
var>nickname</
var> か、<
a href="#formats">ログの書式</
a>
のところで説明されている、明示的な <
var>format</
var> 文字列の
<
p>例えば、以下の二つのディレクティブ群は全く同じ効果をもたらします:</
p>
# CustomLog with format nickname<
br />
LogFormat "%h %l %u %t \"%r\" %>s %b" common<
br />
# CustomLog with explicit format string<
br />
<
p>三つ目の引数は省略可能で、サーバの環境にある変数があるかないかに
応じてリクエストをログ収集するかどうかを制御するために使うことができます。
指定された<
a href="/env.html">環境変数</
a>がリクエストに対して
設定されていた場合 ('<
code>env=!<
var>name</
var></
code>' 文が使われたときは
設定されていない場合)、リクエストがログ収集されます。</
p>
<
p>環境変数は <
module>mod_setenvif</
module> モジュールと
<
module>mod_rewrite</
module> モジュールの両方もしくは
片方を用いてリクエストごとに設定することができます。
例えば、サーバにあるすべての GIF 画像へのリクエストを別のログファイル
には記録したいけれど、メインログには記録したくない、というときは
SetEnvIf Request_URI \.gif$ gif-image<
br />
<
p>古い RefererIgnore ディレクティブと同じ挙動をさせたい場合は、
SetEnvIf Referer example\.com localreferer<
br />
<
description>ログファイルで使用する書式を設定する</
description>
<
syntax>LogFormat <
var>format</
var>|<
var>nickname</
var>
[<
var>nickname</
var>]</
syntax>
<
default>LogFormat "%h %l %u %t \"%r\" %>s %b"</
default>
<
contextlist><
context>server config</
context><
context>virtual host</
context>
<
p>このディレクティブはアクセスログファイルの書式を指定します。</
p>
<
p><
directive>LogFormat</
directive> ディレクティブは二つの形式のどちらかを
とることができます。最初の形式では一つの引数のみが指定され、
続く <
directive>TransferLog</
directive>
で指定されたログで使われるログの書式を設定します。この単独の引数では
上の<
a href="#formats">カスタムログ書式</
a>で説明されているように
<
var>format</
var> を明示的に指定することができます。
もしくは、下で説明されているように前に <
directive>LogFormat</
directive>
ディレクティブで定義されたログの書式を <
var>nickname</
var>を使って
<
p><
directive>LogFormat</
directive> ディレクティブの二つめの形式は
<
var>format</
var> に <
var>nickname</
var> を与えます。
この <
var>nickname</
var> を続きの <
directive >LogFormat</
directive> ディレクティブや
<
directive>CustomLog</
directive> ディレクティブで使うことができます。
Nickname を定義する <
directive>LogFormat</
directive> ディレクティブは
<
strong>他には何もしません</
strong> -- すなわち、ニックネームを定義
する<
em>だけ</
em>で、実際に書式を適用してデフォルトにするということは行ないません。
ですから、これは続く <
directive module="mod_log_config">TransferLog</
directive>
さらに、<
directive>LogFormat</
directive> ディレクティブは既存の nickname を
使って別の nickname を定義することはできません。Nickname には
パーセント記号 (<
code>%</
code>) が含まれていてはいけないことにも注意
<
example><
title>例</
title>
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common
<
description>ログファイルの位置を指定</
description>
<
syntax>TransferLog <
var>file</
var>|<
var>pipe</
var></
syntax>
<
contextlist><
context>server config</
context><
context>virtual host</
context>
<
p>このディレクティブは、ログ書式を直接指定できないことと、
条件付きロギングが無いことを除くと、<
directive module="mod_log_config" >CustomLog</
directive> と全く同じ引数と効果があります。
直接ログ書式を指定する代わりに、ログの書式はそこまでで一番最後に指定された
<
directive module="mod_log_config">LogFormat</
directive> ディレクティブ
もし他の書式が全く指定されていないときは Common Log Format
<
example><
title>例</
title>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""<
br />