LogFormatディレクティブ:ログファイルのフォーマットを定義する

Apache のアクセスログでは Apache にアクセスしてきたユーザーの様々な情報の中から項目を選んでフォーマットを作成し、フォーマットに従ってログを残ることができます。ここでは Apache のログファイルで使用するフォーマットを設定する方法について解説します。

(Last modified: )

LogFormatディレクティブの使い方

Apache のログふぃあるで使用するフォーマットを設定するには LogFormat ディレクティブを使用します。書式は次のとおりです。

LogFormat フォーマットの定義 フォーマット名

記述できる場所は httpd.conf, VirtualHost です。

フォーマットは複数定義しておくことができ、ログの保存場所を指定する CustomLog ディレクティブの設定でどのフォーマットを使ってログを記録していくのかを指定することができます。

フォーマットの定義は次の設定項目を組み合わせて行います。

設定値意味
%%パーセント記号(%)そのもの
%aアクセス元のIPアドレス
%Aサーバ(Apache)のIPアドレス
%B送信されたバイト数(ヘッダーは含まず)
%b送信されたバイト数(ヘッダーは含まず)。0バイトの時は「-」
%Dリクエストの処理時間(マイクロ秒単位)
%fリクエストされたファイル名
%hアクセス元のホスト名
%Hリクエストのプロトコル名
%lクライアントの識別子
%mリクエストのメソッド名
%pポート番号
%PプロセスID
%qリクエストに含まれるクエリー文字列。空白以外は「?」が付く
%rリクエストの最初の行の値
%sレスポンスステータス
%>s最後のレスポンスのステータス
%tリクエストを受け付けた時刻
%T処理にかかった時間(秒単位)
%u認証ユーザー名
%UリクエストのURLパス
%vリクエストに対するバーチャルホスト名
%VUseCanonicalNameによるサーバ名
%X接続ステータス
%{クッキー名}Cリクエストに含まれるクッキーの値
%{環境変数名}e環境変数名の値
%{ヘッダー名}iリクエストに含まれるヘッダー名の値
%{ヘッダー名}oレスポンスに含まれるヘッダー名の値
%{メモ}nモジュールから渡されるメモの値
%{フォーマット}tフォーマットされたリクエストを受け付けた時刻

logio_module モジュールが利用できる場合は次のフォーマットも使用できます。

設定値意味
%I受け取ったバイト数
%O送信したバイト数

これらの項目を列挙しダブルクォーテーション(")で囲って指定します。フォーマット中にダブルクォーテーションを記述する場合は「\」でエスケープして記述します。

項目の中には {} で囲んで記述される項目があります。例えば %{ヘッダー名}i はヘッダーの中からヘッダー名に指定した値だけを取り出して記録します。 %{User-Agent}i と記述した場合にはヘッダーの中の User-Agent の値を保存します。

例えば「アクセス元のIPアドレス」「リクエストされたファイル名」「レスポンスステータス」だけが必要であれば、 LogFormat ディレクティブを使って次のようなフォーマットを httpd.conf に記述してください。

LogFormat "%a %f %s" mylogformat

httpd.conファイルでの記述

httpd.conf ファイルではデフォルト次の 2 のフォーマットが定義されています。

<IfModule log_config_module>
    #
    # The following directives define some format nicknames for use with
    # a CustomLog directive (see below).
    #
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      # You need to enable mod_logio.c to use %I and %O
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
</IfModule>

ログのフォーマットとして common および combined 、そして logio_module が利用できる場合には combinedio も使用できます。

common フォーマットは次のような構成になっています。ログの保存として common を指定した場合はこれらの情報が 1 行で記録されていきます。

%h    アクセス元のホスト名
%l    クライアントの識別子
%u    認証ユーザー名
%t    リクエストを受け付けた時刻
\%r\  リクエストの最初の行の値
%>s   最後のレスポンスのステータス
%b    送信されたバイト数

combined フォーマットは common フォーマットに次のような項目が追加されています。

\%{Referer}i\     リファラー
\%{User-Agent}i\  User Agent

combinedio フォーマットは combined フォーマットに次のような項目が追加されています。

%I  受け取ったバイト数
%O  送信したバイト数

これらのデフォルトで用意されているログのフォーマットを使用してもいいですし、新しくフォーマットを定義して使用することもできます。

-- --

Apache のログファイルで使用するフォーマットを設定する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。