【Apache】ログの場所の確認と設定方法(LogLevel, ErrorLog,CustomLog,LogFormat)

Apache

Apacheをいじっているときに挙動が意図しないようになったとき、ログを確認することで解決の糸口が見つかる場合があります。
LogLevel, ErrorLog,CustomLog,LogFormatといった基本的な使い方と、ログの場所の確認や設定方法を紹介します。

どのレベルまでエラーログを出力するかを決めるLogLevel

LogLevelは、どのレベルまでエラーログを出力するかを決定します。
コンテキストは、サーバ設定ファイル, バーチャルホストです。
レベルには、以下のようなものがあります。

  • emerg – 緊急
  • alert – 直ちに対処が必要
  • crit – 致命的な状態
  • error – エラー
  • warn – 警告(デフォルト)
  • notice – 普通だが、重要な情報
  • info – 追加情報
  • debug – デバッグメッセージ

デフォルトは、warnです。
コンテキストがサーバ設定ファイルかバーチャルホストのため、.htaccessには記載できません。
下にいくほど詳細なログを確認することができます。ただし、ファイル容量は大きくなるので注意しましょう。

MAMPだと、httpd.confに以下の記述がありあす。

#
# LogLevel: Control the number of messages logged to the error_log.
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel error

このlogLevelを上のレベルに変更することでエラーログのレベルを変更することができます。

エラーログの吐き出し場所を指定するErrorLog

ErrorLogは、エラーログの吐き出し場所を指定することができます。

コンテキストは、サーバ設定ファイル, バーチャルホストです。

MAMPの場合は、httpd.confの以下の場所に記述があります。

#
# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a 
# container, error messages relating to that virtual host will be
# logged here.  If you *do* define an error logfile for a 
# container, that host's errors will be logged there and not here.
#
ErrorLog "/Applications/MAMP/logs/apache_error.log"

ユーザー独自設定のログファイルの吐き出し場所を指定するCustomLog

CustomLogは、ユーザー独自設定のログファイルの吐き出し場所を指定することができます。
コンテキストは、サーバ設定ファイル, バーチャルホストです。

MAMPの場合は、httpd.confの以下の場所にコメントアウトで記述があります。

#
# The location and format of the access logfile (Common Logfile Format).
# If you do not define any access logfiles within a 
# container, they will be logged here.  Contrariwise, if you *do*
# define per- access logfiles, transactions will be
# logged therein and *not* in this file.
#
#CustomLog "/Applications/MAMP/logs/apache_access.log" common

#
# If you prefer a logfile with access, agent, and referer information
# (Combined Logfile Format) you can use the following directive.
#
#CustomLog "/Applications/MAMP/logs/apache_access.log" combined

CustomLogの出力フォーマットを決定するLogFormat

LogFormatを設定することで、CustomLogの出力フォーマットを決定することができます。
コンテキストは、サーバ設定ファイル, バーチャルホストです。
MAMPだと、httpd.confに以下の記述がありあす。

<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

CustomLog "/Applications/MAMP/logs/apache_access.log" common

</IfModule>

この%と記号の組み合わせの表記について、Apacheの公式ドキュメントで意味を確認することができます。
mod_log_configの公式ドキュメント: https://httpd.apache.org/docs/current/mod/mod_log_config.html

mod_log_configがログを設定するためのモジュールです。
上のドキュメントのカスタムログ書式でそれぞれの意味を確認することができます。
LogFormatのあとに、第一引数と第二引数があります。
第一引数には、出力したい内容を指定します。
第二引数には、上の場合、commonを第二引数に指定して、CustomLogにもcommonを指定するとCustomLogにしていしたパス部分に出力できるようになります。
上のcombinedも同様にCustomLogで指定すればそのパスに出力されることができます。

第一引数について、たとえば、%hなら、リモートホストが出力されます。
%lならリモートログ名、つまりクライアントが持っている一意のIDのようなものが出力されます。デフォルトはオンになっていないのでだいたいハイフンで出力されます。
%uならリモートユーザで、認証がかかっていない場合はハイフンで出力されます。
%tならリクエストを受付けた時刻です。
%rならリクエストの最初の行、つまりリクエストのパスです。
%>sはレスポンスに含まれるHTTPステータスです。
%bは、ファイルの容量です。
%{Referer}iは、ヘッダーに含まれているパラメータを出力できます。

このようにしてログとして出力したい内容を、カスタムでフォーマット化することができます。

ログの確認方法

ターミナルでファイルを開く

ターミナルを開いて、
windowsならii、Macならopenでフォルダを開くことができます。

open /Applications/MAMP/logs/

ログを見る際、上にある行が古いものとなります。
最新のログは一番下にあります。

コマンドでログ内容を確認する

ファイルを開かなくてもコマンドでログ内容を確認することができます。

# Windows(PowerShell)
Get-Content ファイルパス -Wait -Tail 20
# Get-Content C:\MAMP\logs\access.log -Wait -Tail 20

# Unix系(Mac, Linux)
tail -f ファイルパス

たとえば、Macなら、ターミナルで

tail -f /Applications/MAMP/logs/apache_error.log

とするとログ内容をターミナル上で確認することができます。
これで監視している状態になるので、URLを更新したりするとログが出力されます。

Apache

Posted by devsakaso