章: 第6章: パフォーマンスとインフラ
本番でエラーが起きたとき、原因を特定するのに何時間もかかっていませんか?
ログが不足していると、エラーの再現手順が分からず原因特定に時間がかかります。Monologを使えば、ログの出力先・フォーマット・レベルを柔軟に制御でき、障害時の対応速度を大幅に上げられます。
ログ設計が不十分だと何が起きるか
error_log() を散発的に書いただけのログでは、いつ・どこで・何が起きたかが追えません。適切なログレベルとコンテキスト情報をセットで記録することで、原因調査が「ログを読む」だけで完結するようになります。
ログレベルの使い分け
| レベル | 意味 | 使う場面 |
| DEBUG | 詳細なデバッグ情報 | 開発環境の動作確認 |
| INFO | 正常な操作の記録 | ユーザーログイン・処理完了 |
| WARNING | 異常ではないが注意が必要 | 非推奨APIの使用・リトライ発生 |
| ERROR | エラーが発生したが処理継続 | 決済失敗・外部API障害 |
| CRITICAL | 緊急対応が必要 | DBダウン・認証システム障害 |
チェックポイント: ログにはリクエストIDやユーザーIDをコンテキストとして含めましょう。「どのリクエストで・誰が・何をした結果エラーが起きたか」がログだけで追えるようになります。個人情報(パスワード・クレジットカード番号)は絶対にログに含めてはいけません。
コードサンプル
<?php
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\SlackWebhookHandler;
$log = new Logger('app');
$log->pushHandler(new StreamHandler('app.log', Logger::DEBUG));
$log->pushHandler(new SlackWebhookHandler('https://hooks.slack.com/...', Logger::ERROR));
$log->info('ユーザーがログインしました', ['user_id' => 42]);
$log->error('決済処理に失敗しました', ['order_id' => 99]);
まとめ & 次のステップ
- Monologで出力先・レベル・フォーマットを柔軟に設定できます
- ログにはリクエストIDとコンテキスト情報を必ず含めましょう
- ERRORレベル以上はSlack通知など即時アラートを設定することを推奨します
- 個人情報・パスワードはログに出力しないよう、ログ出力箇所をレビューしましょう
- Laravelでは
config/logging.phpで複数チャンネルを設定できます
次回は Dockerでのローカル環境構築 を学びます。チームで環境差異のない開発環境を作る方法を整理しましょう。