2026年7月7日
2026年7月7日
ApacheのLogLevel設定方法 エラーログの詳しさをレベル・モジュール単位で変える
LogLevel は、Apache HTTP Server がエラーログ(ErrorLog で指定したファイル)にどこまで細かく書き出すかを決めるディレクティブです。アクセスログ(CustomLog)の内容には影響しません。この記事は Apache 2.4 の公式ドキュメントに沿って、2026年11月時点の内容で書いています。
LogLevel のレベル一覧
重要度の高い順に並べると次のとおりです。指定したレベルと、それより重要度の高いレベルのメッセージが記録されます。たとえば LogLevel info にすると、notice や warn も記録されます。
| レベル | 意味 |
|---|---|
emerg |
緊急。システムが使えない状態 |
alert |
すぐに対処が必要 |
crit |
致命的な状態 |
error |
エラー |
warn |
警告(既定値) |
notice |
通常だが重要な情報 |
info |
情報 |
debug |
デバッグ用のメッセージ |
trace1〜trace8 |
さらに細かい追跡用のメッセージ。数字が大きいほど詳しく、trace7 と trace8 は大量のデータを書き出す |
既定値は warn です。なお、通常のファイルにログを書いている場合、notice レベルのメッセージは LogLevel を上げても抑えられず、常に記録されます(syslog に出している場合は除く)。
設定ファイルの場所
LogLevel はサーバー全体、<VirtualHost>、<Directory> などの中に書けます。主なディストリビューションでは、次のファイルに既定の LogLevel warn が書かれています。
| 環境 | 設定ファイル | エラーログの既定の場所 |
|---|---|---|
| Debian / Ubuntu | /etc/apache2/apache2.conf |
/var/log/apache2/error.log |
| RHEL / AlmaLinux / Rocky Linux | /etc/httpd/conf/httpd.conf |
/var/log/httpd/error_log |
バーチャルホストごとに変えたいときは、そのサイトの設定ファイル(Debian 系なら /etc/apache2/sites-available/ の中、RHEL 系なら /etc/httpd/conf.d/ の中など)の <VirtualHost> に書きます。
基本の書き方
サーバー全体のレベルを変える例です。既にある LogLevel の行を書き換えます(同じ場所に2行あると、後に書いたものが効きます)。
LogLevel warn
バーチャルホストだけ詳しくする例です。
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/example
ErrorLog ${APACHE_LOG_DIR}/example-error.log
LogLevel info
</VirtualHost>
${APACHE_LOG_DIR} は Debian 系の設定で定義されている変数です。RHEL 系では logs/example-error_log のように書きます。
モジュールごとにレベルを変える
モジュール名:レベル の形で、特定のモジュールだけレベルを変えられます。モジュール名を付けずに書いたレベルは、すべてのモジュールに対する指定になります。
# 全体は info、mod_ssl だけ warn
LogLevel info ssl:warn
モジュール名は次の3通りのどれで書いても同じ意味です。
LogLevel info ssl:warn
LogLevel info mod_ssl.c:warn
LogLevel info ssl_module:warn
mod_rewrite の動きを調べる
Apache 2.4 では、2.2 にあった RewriteLog と RewriteLogLevel は廃止され、LogLevel の trace レベルで mod_rewrite の処理を記録します。
LogLevel warn rewrite:trace3
エラーログに [rewrite:trace3] などの印が付いた行が出ます。trace レベルは記録量が多く処理も遅くなるため、原因が分かったら元に戻します。
ディレクトリごとにレベルを変える
<Directory> の中に書くと、そのディレクトリへのリクエストに関するメッセージだけレベルを変えられます。
LogLevel info
<Directory "/var/www/example/app">
LogLevel debug
</Directory>
この指定が効くのは、リクエストに結び付いたメッセージだけです。接続やサーバー全体に関するメッセージは、外側の LogLevel に従います。
変更を反映する手順
設定を書き換えたら、構文を確認してから再読み込みします。
Debian / Ubuntu:
sudo apachectl configtest
sudo systemctl reload apache2
RHEL / AlmaLinux / Rocky Linux:
sudo apachectl configtest
sudo systemctl reload httpd
Syntax OK と表示されない場合は、表示された行番号の記述を直してから再読み込みします。反映後は、エラーログを見ながら対象のページにアクセスして、記録の量を確かめます。
sudo tail -f /var/log/apache2/error.log
RHEL 系では /var/log/httpd/error_log を見ます。
どのレベルを選ぶか
| 状況 | 目安 |
|---|---|
| 通常の運用 | 既定の warn |
| 原因が分からない不具合を調べるとき | 問題のモジュールだけ debug や trace1〜trace3(例: LogLevel warn rewrite:trace3) |
| ログの量を抑えたいとき | error など。ただし公式ドキュメントでは少なくとも crit 以上の記録を勧めている |
全体を debug や trace にすると、ログの量が増えてディスクを圧迫し、処理も重くなります。調べたいモジュールやディレクトリに絞って一時的に上げ、終わったら戻す使い方が安全です。また詳しいレベルでは、リクエストの中身やファイルのパスなど公開したくない情報がログに残ることがあるので、ログファイルの閲覧権限にも注意します。
まとめ
LogLevelはエラーログの詳しさを決める。既定はwarn- 指定したレベルより重要度の高いメッセージも記録される
LogLevel info ssl:warnのようにモジュールごと、<Directory>の中でディレクトリごとに変えられる- mod_rewrite の調査は
rewrite:trace3などで行い、終わったら戻す - 変更後は
apachectl configtestで確認してからsystemctl reloadで反映する
エラーログやアクセスログから不審なアクセスを見つける方法は Apacheのログから攻撃を検知する で扱っています。