PHPのエラーログを完全ガイド!初心者でもわかるerror_logとログ解析の基本
生徒
「PHPでエラーが出たときに、画面には何も表示されないのに、どこかに記録されていると聞いたんですが、本当ですか?」
先生
「本当ですよ。PHPにはエラーログという仕組みがあって、エラーの内容をファイルに記録しておくことができます。error_logという関数や設定を使います。」
生徒
「エラーログって、どうやって確認したり解析したりすればいいんでしょうか?初心者でも扱えますか?」
先生
「もちろん初心者でも扱えますよ。今日は、PHP のエラーログの記録方法と、error_log関数の使い方、それからログの読み方や解析の基本まで、順番に説明していきます。」
1. PHPのエラーログとは?なぜ記録と解析が大事なのか
PHPのエラーログとは、PHPの実行中に発生したエラーや警告、注意メッセージなどを、テキストファイルなどに記録しておく仕組みです。 表示されなかったエラーも、エラーログを見れば「いつ」「どこで」「どんなエラーが起きたか」を後から確認できます。
例えば、利用者がアクセスしたときだけ発生するエラーや、特定の時間帯にだけ発生する不具合は、開発者の画面では再現できないことがあります。 そうしたときに、エラーログが残っていれば、原因を探すための手がかりになります。
エラーログは、いわば「PHPプログラムのカルテ」のようなものです。どこが具合悪かったのか、いつ症状が出たのかを記録してくれるので、 初心者の段階からエラーログの記録と解析に慣れておくと、トラブル対応がとても楽になります。
2. PHPのerror_log関数の基本的な使い方
PHPでは、プログラムの中から自分でエラーログを書き込みたいときに、error_log関数を使います。
これは「好きなメッセージをログに送る」ための関数で、エラーだけでなく、デバッグ用のメモを残す用途にも便利です。
<?php
error_log("テスト用のエラーログメッセージです。");
?>
このコードを実行すると、サーバーのエラーログに「テスト用のエラーログメッセージです。」という文字が出力されます。 どこに出力されるかは、PHPの設定(php.ini)で決まっています。
error_logは、システムが自動で出してくれるエラーメッセージとは別に、「自分で状況を説明するログ」を残したいときに使うと、後から解析しやすくなります。
3. エラーログの出力先を設定する(php.iniと設定項目)
PHPのエラーログは、php.iniという設定ファイルで出力先や出力方法を指定できます。
サーバーの管理画面や設定ファイル編集を通して、次のような項目を確認・設定します。
log_errors:エラーログを記録するかどうか(On / Off)error_log:エラーログを書き込むファイルのパスerror_reporting:どのレベルのエラーを記録するか
例えば、ログを有効にして専用ファイルに出力したい場合は、下記のような設定になります。
; php.ini の一例(実際は設定ファイルで編集)
log_errors = On
error_log = "/var/log/php_errors.log"
error_reporting = E_ALL
E_ALLは「Notice から Fatal Error まで、すべてのエラーを対象にする」という意味です。
本番環境では画面にエラーを表示せず、エラーログにだけ出力する設定がよく使われます。
4. ファイルにエラーログを書き込む実践例
実際に、PHPのコードからエラーログファイルへメッセージを書き込むサンプルを見てみましょう。 error_log には第二引数以降を指定することで、出力方法を細かく制御できます。
<?php
$message = "ユーザーID: 123 でエラーが発生しました。";
$file = __DIR__ . "/app_error.log";
// 第2引数に 3 を指定すると、指定したファイルに追記される
error_log($message . PHP_EOL, 3, $file);
?>
この例では、app_error.logという独自のログファイルを用意し、そこにエラーログメッセージを書き込んでいます。
アプリケーション専用のログを作ることで、サーバー全体のログとは別に、自分のシステムだけの記録を残せます。
PHP_EOLは「改行コード」を表す定数で、ログを読みやすくするために行の終わりに付けるのが一般的です。
5. ログファイルの読み方と基本的な解析の考え方
エラーログには、通常「日時」「エラーの種類」「メッセージ」「発生したファイル名と行番号」などが記録されています。 初心者がまず見るべきポイントは次の3つです。
- いつエラーが発生したか(日時)
- どのファイルの何行目か(場所)
- どんな内容のエラーか(メッセージ)
例えば、次のようなエラーログがあったとします。
[2025-01-01 10:00:00] PHP Warning: Undefined array key "name" in /var/www/html/index.php on line 25
この場合、「index.php の25行目で、nameという配列のキーが見つからない」という意味になります。
その行のコードを確認し、$data["name"] を使う前に存在チェックを入れるなどの対策を行います。
ログの解析は、一気に全部を理解しようとするのではなく、「1行ずつ翻訳してみる」感覚で読み解くと理解が進みます。
6. 開発環境と本番環境でのエラーログ運用の違い
PHPのエラーログやエラー表示は、開発環境と本番環境で設定を変えるのが一般的です。 開発中は画面にエラーを表示したほうが便利ですが、本番では利用者に内部エラーを見せないほうが安全だからです。
そのため、次のような方針で運用することが多いです。
- 開発環境:エラーを画面に表示+エラーログにも記録
- 本番環境:エラーは画面に表示せず、ログだけに記録
画面表示に関する設定は、display_errors という項目で制御できます。
; 開発環境の一例
display_errors = On
log_errors = On
; 本番環境の一例
display_errors = Off
log_errors = On
本番環境では、エラーログをきちんと記録し、それを定期的に確認することが大切です。 特に、Warning や Fatal Error が頻発していないかをチェックすることで、障害の予兆を早めに発見できます。
7. エラーログとアプリケーションログを組み合わせた実践的なlogging
PHPのエラーログだけでなく、自分のアプリケーション用のログも組み合わせて記録すると、より細かい解析ができるようになります。 例えば、ユーザーIDや処理内容、実行時間なども一緒にログに書き込むと、後から「どのユーザー操作で不具合が起きたのか」を追いやすくなります。
<?php
function app_log($message)
{
$file = __DIR__ . "/app.log";
$time = date("Y-m-d H:i:s");
error_log("[$time] " . $message . PHP_EOL, 3, $file);
}
app_log("ユーザーID=123 の注文処理を開始しました。");
?>
このように、自分で簡易的なロギング機能を作り、エラーログと合わせて運用することで、 PHPのエラーハンドリングとログ解析が一体となった、実践的なトラブル対応ができるようになります。
初心者のうちから「エラーは隠すのではなく、ログとして残して後から解析する」という考え方に慣れておくと、 PHPの開発スキルだけでなく、運用や保守の観点でも大きな強みになります。