エラーログの出力先とログレベルの設定(error_logディレクティブ)

広告

error_log ディレクティブは、サーバーで発生したエラーの保存先や、どのレベルのエラーを記録するかを設定するためのディレクティブです。ここでは Nginx における error_log ディレクティブの使い方について解説します。

error_logディレクティブの書式

error_log ディレクティブは、エラーログの保存先や、どのレベルのエラーを記録するかを設定するディレクティブです。 error_log ディレクティブの書式は次の通りです。

Syntax:   error_log file [level];
Default:  error_log logs/error.log error;
Context:  main, http, mail, stream, server, location

error_log ディレクティブは main コンテキストの他、複数のコンテキストで使用できます。引数として、第 1 引数にエラーログの保存先を、省略可能な第 2 引数に記録するエラーレベルを記述します。

server {
  error_log エラーログの出力先パス [レベル];
}

レベルに設定可能な値は次の通りです。省略した場合は error を設定した場合と同じです。

debug  デバッグ用
info   情報
notice 注意
warn   警告
error  一般エラー(デフォルト値)
crit   要緊急対応エラー
alert  要即時対応エラー
emerg  システム異常

レベルは下に行くほど重大なエラーになります。

いずれかのレベルを指定した場合、そのレベル以上の重大なエラーが記録されます。例えば error を設定した場合は、 emerg alert, crit, error に該当するエラーが記録されます。

設定の上書きについて

error_log ディレクティブは上位のコンテキストで設定した内容が下位のコンテキストに継承されますが、下位のコンテキストで再設定すると、その設定が優先されます。

http {
  server {
    error_log c:/nginx/logs/error.log warn;

    location /test/ {
      error_log c:/nginx/logs/error.log info;
    }
  }
}

この場合、仮想サーバ全体ではエラーログのレベルは warn ですが、リクエストのパスが /test/ と一致する場合は、エラーログのレベルとして info が適用されます。

error_logディレクティブの設定例

Windows 環境に Nginx をインストールした場合、デフォルトでは c:/nginx/logs/error.log ファイルに保存されます。

error_logディレクティブ(1)

複数の仮想サーバを同じサーバ上で動かしている場合は、サーバごとにエラーログを保存するファイルを分けるのが推奨されます。

http {
  server {
    server_name example.com;
    error_log c:/nginx/logs/error_example_com.log warn;
  }

  server {
    server_name example.jp;
    error_log c:/nginx/logs/error_example_jp.log warn;
  }
}

設定するレベルについては、本番環境であれば errorwarn、開発環境であれば noticeinfo など、必要となる情報に応じて使い分けます。

debug については保存される情報が大きくなるため、使用は必要な場合に限定してください。

標準エラー出力へログを出力する

保存先として、ファイルパスではなく stderr を指定すると、、標準エラー出力へログを出力することができます。

http {
  server {
    error_log stderr info;
  }
}

Windows 環境で Nginx を起動している場合、起動に使用したコマンドプロンプトや PowerShell に出力されます。

実際にこの設定を行ったあと、コマンドプロンプトから Nginx を起動すると、起動するのに使用したコマンドプロンプト上に次のようなエラーログが出力されました。

error_logディレクティブ(1)

エラーログのファイルを開かなくても画面上ですぐに確認したい場合に便利です。

※ Linux 環境では、Nginx をフォアグラウンドで起動した場合にコンソールへ出力されます。デーモンとして起動している場合は通常表示されません。

※ コンテナ環境(Docker など)では stderr に出力されたログはコンテナのログとして収集されるため、ログ管理に便利です。

-- --

Nginx における error_log ディレクティブの使い方について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。