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のログから攻撃を検知する で扱っています。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲