【PHP】エラーログを出力するには?設定から実装まで完全解説

【PHP】エラーログを出力するには?設定から実装まで完全解説 PHP

PHPで開発していると、予期せぬエラーに遭遇することがあります。

こうしたエラーをいち早く把握して修正するために必要なのが「エラーログの出力」です。
PHPでは標準機能としてエラーのログ出力が可能で、適切に設定すると エラーの詳細をファイルに残せるようになります。

ここでは設定方法・コード実装・注意点まで、初心者でも迷わないように丁寧に解説します。

【執筆者の簡易プロフィール】
kazu 執筆者:kazu
  • 38歳男性、既婚
  • Webエンジニア
  • 新卒でSESに入社し、Web系企業に常駐、その後Web系スタートアップに転職
  • 主な使用言語はRuby、PHP、JavaScript、HTML/CSS
  • モットーは「人に厳しく、自分にはもっと厳しく」

なぜエラーログが重要なのか?

エラーログは、開発中はもちろん 本番環境でもバグを検知するための重要な情報源です。

エラーが発生した行数、原因、発生日時などが記録されるため、後で振り返って修正する際の手がかりになります。

特に本番では、画面にエラーを直接表示せずにログに記録しておくのが安全な運用です。

基本はphp.iniで設定する

PHPでエラーのログ出力を行うには、まず php.ini に正しい設定が入っている必要があります。
設定すべき主なオプションは次の4つです。

  • error_reporting:出力するエラーの種類
  • display_errors:画面に表示するかどうか
  • log_errors:ログに書き出すかどうか
  • error_log:ログを書き出すファイルのパス

例えば、次のように設定します。

error_reporting = E_ALL
display_errors = Off
log_errors = On
error_log = /path/to/php-error.log

この例では全てのエラーをログに記録し、画面には表示しないように設定しています。

本番環境では特に、ユーザーに詳細なエラーを見せないことが推奨されます。

エラーログの基本的な制御方法

どの種類のエラーをログに出すかは error_reporting で制御します。

全てのエラーを出す設定は以下の通りです。

error_reporting(E_ALL);

これにより、注意レベルから重大なエラーまで全て出力可能になります。

ただし、開発時だけでなく本番環境でも記録したい場合、必要なレベルだけを絞ることもできます。

ini_setで動的に設定する方法

php.iniを編集できない場合や、特定のスクリプトだけログを制御したい場合には、PHPコード内で設定を行うこともできます。

例えば、実行中にログ出力を有効化する場合は以下の通りです。

<?php
ini_set('display_errors', '0');  // 画面表示はしない
ini_set('log_errors', '1');      // エラーログを有効化
ini_set('error_log', '/path/to/php-error.log');  // 保存先
error_reporting(E_ALL);          // 全てのエラーを対象
?>

このように書くことで、php.iniを書き換えられない環境でもログ出力が可能になります。

error_log関数で任意のメッセージを記録する

PHPには標準で error_log() という関数が用意されています。

これを使うと、自分でログ内容をカスタムして出力できます。

<?php
$message = "ユーザー登録でエラー発生";
error_log($message, 3, "/path/to/custom_error.log");
?>

ここで指定している3という値は「ファイルへの書き込み」を意味します。
第1引数はメッセージ、第3引数はログファイルのパスです。

このコードは、任意のエラーメッセージを指定したログファイルに追記する処理になります。

実践:例外を捕捉してログに残す

普通のエラーだけでなく、例外を捕捉した際にもログを出したいことがあります。

その際にはtry/catch構文と組み合わせます。

<?php
try {
// エラーを発生させたいコード
throw new Exception("例外テストエラー");
} catch (Exception $e) {
$log = "[" . date("Y-m-d H:i:s") . "] " . $e->getMessage();
error_log($log . "\n", 3, "/path/to/exceptions.log");
}
?>

このように書くと、例外発生時に日時・メッセージをまとめてログに残すことができます。

ログ出力がうまくいかない時のチェックポイント

もし設定やコードを書いたのにログが出力されない場合、次の点を確認してください。

  • ログファイルのパスが正しいか
  • 書き込み権限があるか(Linuxなど)
  • Webサーバを再起動して設定が反映されているか

例えばLinuxのサーバであれば、ログファイルが存在しない場合は作成し、適切な所有者/パーミッションを与える必要があります。

まとめ:エラーログ運用のベストプラクティス

PHPのエラーログは、開発・保守の両面で不可欠なツールです。

以下のポイントを押さえると、ログ運用の精度がぐっと上がります。

  • 本番ではdisplay_errorsはOffにする
  • log_errorsを有効にして必ずログを記録する
  • error_logで任意ログのカスタマイズも活用する
  • 定期的にログを確認し、不要なログはアーカイブ〜削除する

適切にログを出力し、確実にエラー情報をつかむことで、PHPアプリケーションの信頼性は飛躍的に向上します。

コメント

タイトルとURLをコピーしました