ApacheのCustomLogとTransferLogの違い2019/06/14ApacheCentOSこの二つの違いがあんまりわかっていなかった上に、適当にApacheを設定していたせいで両方とも有効になっていて気持ち悪かったので、調べたことをメモしておきます。結論から言うと私はCustomLogだけでログを定義することにしました。それぞれのディレクティブでできること/できないことどちらもログの出力先、フォーマットを指定するディレクティブですが、細かい部分が違います。CunstomLogの方が新しいんだと思う。以下、Apache2.4について記載します。ディレクティブいずれもパスを指定してログを書き込んだり、loggerコマンドを通してSyslogにログを送り込んだりはできます。ログのフォーマットに関する指定とロギングする条件を指定できるかできないかに違いがあります。LogFormatディレクティブとCustomLog/TransferLogLogFormatディレクティブはその名の通りログのフォーマットを規定するディレクティブです。このディレクティブは二つの書き方があります。ニックネームをつけないLogFormatログフォーマットの書き方は置いておいて、ただ単にログフォーマットを規定するだけなのがこちら。\"%{User-agent}i\""1この書き方をすると、このLogFormatディレクティブより下にあるTransferLogのログフォーマットを規定できます。ニックネーム付きのLogFormatログフォーマットを規定した後に、ニックネームをつけることもできます。ncsa_extended_combined1この書き方をすると、ニックネーム「ncsa_extended_combined」を使ってCustomLogのログフォーマットを定義することができます。ncsa_extended_combined1CustomLogは、フォーマットをニックネームで呼び出せるため、設定をどの順で書くか気にする必要がありません。この点でCustomLogの方が使いやすいです。ディレクティブ余談ですがCustomLogはLogFormatディレクティブを指定せず直接フォーマットを書くこともできます。ロギングする条件CustomLogでは環境変数を利用してロギングする条件を指定することができます。以下はアクセス元のIPアドレスやホスト名を読み、条件に当てはまったらそのアクセスに環境変数「no_log」を設定する方法。ディレクティブCustomLogではアクセス時の環境変数を読み、ロギングするかしないかを指定することができます。びっくりマークで否定なので、以下の設定で環境変数no_logが指定されていないときのみロギングを行う、という設定ができます。env=!no_log1監視サーバからのポーリングアクセスはロギングしない(もしくは別のCustomLogディレクティブで別ログファイルにのみ書き出す)、という設定ができるので便利です。この点でもCustomLogの方が優れているので、TransferLogを使う理由はあまりありません。CentOS7のconf.d/ssl.confではなぜかTransferLogがデフォルト設定になっているCentOS7でyumで入るApacheでしか確認していませんが、CustomLogはconf/httpd.confで定義されています。デフォルトのApacheのSSLの設定ファイルはconf.d/ssl.confなのですが、こちらのデフォルト設定では、SSLを有効にしたバーチャルホストの設定内でTransferLogが有効化されています。Formatで記録されます。Formatなフォーマットのlogs/ssl_access_logがそれぞれ生成されます。私はlogs/ssl_access_logもロギングの条件を指定したかったので、TransferlogをやめてCustomLogに直しました。ログフォーマットもcommonやめてcombinedにしました。ついでにログファイル名も変えてます。SetEnvIfは上のコンテキストで設定しておけば下に継承されるので、httpd.confにてサーバレベルで設定しました。(~snip~)</VirtualHost>12345これで、80番ポートへのアクセスはlogs/access_logへ、443番ポートへのアクセスはlogs/wordpress_ssl_access_logへ、それぞれ!no_log条件付きでcombined形式でロギングできるようになりました。commonとcombinedのフォーマットの違い定義上はこうなってます。common12combinedの方はリファラとユーザーエージェントが入ります。logs/ssl_request_logってなんやねんconf.d/ssl.confでは、デフォルトで以下のような設定も入っています。%b"</VirtualHost>12345678バーチャルホスト切るときは、各バーチャルホストで詳細にロギングすることにして、大元ではこんなコンパクトなログだけ残しとけばいいんじゃないということが書いてあります。複数のバーチャルホスト切ってないなら不要なのでコメントアウトしてます。