問題
アプリケーションのエラーが、期待通りにPHPエージェントに報告されない、または捕捉されない。
解決策
サードパーティのエラーハンドラ を使用している場合(例: XDebug または Laravel のエラーハンドラ):
- サードパーティのエラーハンドラを無効にする。
- エラーが報告されていることを確認するには、 APM errors page を参照してください。
サードパーティ製のエラーハンドラを使用していない場合 それでも期待したエラーが表示されない場合(例:404エラー)。
- PHP がエラーを処理していることを確認してください。なぜなら、New Relic は PHP が認識できないエラー (Web サーバー上の静的資産の 404 エラーなど) を報告できないからです。
newrelic_notice_error()
APIコール を使用して、表示を期待するエラーを手動で計測します。- エラーが報告されていることを確認するには、 APM errors page を参照してください。
原因
PHPはエラーを自身のデフォルトハンドラで処理します。XDebugやLaravelのエラーハンドラのような多くのサードパーティのハンドラは、しばしばPHPのデフォルトハンドラを上書きし、PHPの代わりにエラーを捕捉します。
PHPエージェントには独自のエラーハンドラがあり、PHPがエラーを捕捉することに依存しています。1つのエラーを処理できるのは1つのハンドラーだけなので、エージェントは、PHPに捕捉される前にサードパーティのハンドラーによって既に処理されたエラーを見ることはありません。
さらに、いくつかのエラー(例えば404エラー)はウェブサーバーレベルで発生することが多いので、PHPが関与することはなく、エージェントによってエラーが捕捉されることはありません。404エラーの処理にPHPが使われている場合は、 newrelic_notice_error()
APIコール を使って、これらのエラーを手動で計測してください。