Nginx PHP サービスのエラー ログというと、通常、Nginx アクセス ログ、エラー ログ、PHP エラー ログが考えられます。非常に単純な質問に思えますが、実際にはアプリケーションの設定とログの記録場所が関係しており、apt-get を使用して ubuntu などのシステムにインストールすると、より合理的な独自の設定ファイルのセットが利用可能になります。さらに、実行中のアプリケーションの設定もログの方法と内容に影響します。
エラーと例外の違い
エラーと例外については、簡単な例を使用して理解できます。
<?php try { 1 / 0; } catch (Exception $e) { echo "catched", PHP_EOL; }
この小さな例を実行すると、 「PHP 警告: ゼロによる除算...」エラーが直接発生します。理由は簡単です。これは例外ではなく論理エラーであるため、try では捕捉できません。同様に、変数が使用前に定義されていない場合は、キャプチャされずに警告が生成されます。
しかし、この問題には PHP7 でいくつかの変更が加えられています。たとえば、上記の例では / を % に変更し、PHP7 環境で実行すると、別のプロンプトが表示されます:
PHP Fatal error: Uncaught DivisionByZeroError ...
このヒントに従って、catch の条件を変更すると、
<?php try { 1 / 0; } catch (DivisionByZeroError $e) { echo "catched", PHP_EOL; }
このようにして、エラーは正常にキャプチャされ、catch が出力されます。
最初の例では、Excepiton を ErrorException に変更すると正常にキャッチすることもできます。
PHP5 では剰余と除算が同じであるのに、PHP7 (私のテスト環境は 7.0.4) では除算が DivisionByZeroError 問題にならない理由については、これはバグのはずです。
ログ記録
PHP 自体には次の構成可能なログがあります:
# php-fpm エラー ログ (php-fpm.conf、起動を記録します)
#● php-fpm スロー ログ (これも php-fpm.conf で設定され、遅い実行を記録します) ● php エラー ログ (php で設定されます) .ini を使用してアプリケーション エラー ログを記録します)さらに、Nginx には、アクセス ログとエラー ログという 2 つの構成可能なログもあります。これらのログファイルは機能が異なり、記録内容も異なります。ただし、注意すべき点が 1 つあります。php-fpm でエラー ログの場所が設定されているが、そのログの場所が書き込み可能ではない場合 (php-fpm は起動時に確認するため、場所は設定中に正しい必要があります)、適切な設定条件 エラー ログは CGI に返され、nginx のエラー ログに書き込まれます。 したがって、問題が発生したときの一般的な検索方法は次のとおりです: 1. Nginx アクセス ログでリクエストのステータス コードを確認します 2. PHP エラーを確認しますlog エラー レコードとスタック情報3. 異常な再起動レコードがないか php-fpm ログを確認します (これは、コアまたは拡張機能に問題がある場合に発生します)ただし、上記の状況では、次のことも行います。上記のプログラムによってスローされた例外のログ記録がないことがわかります。例外レコード
例外はエラーとは異なります。厳密に言えば、これはエラーではなくアプリケーション ロジックの例外です。適切なプログラム ロジックを通じて手動でトリガーできます。 . .ただし、ほとんどの場合、データベースに接続できないことやフレームワークの不適切な使用によって引き起こされる例外など、例外も記録する必要があるため、ログを使用して問題を特定し、タイムリーに処理する必要があります。 PHP には、エラーおよび例外の処理メソッドをカスタマイズするための 2 つの関数が用意されています。## ● set_error_handler
● set_Exception_handler
したがって、 set_Exception_handler 関数を使用できます。すべての例外をキャッチしてログに記録します。
monologは優れた例外記録ライブラリであり、 PSR-3 標準の実装にも基づいています。 Laravel と Symfony では例外を記録するためにデフォルトで使用されます。必要に応じて、独自のプロジェクトへの導入を検討することもできます。
以上がPHP エラーと例外のログ記録の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。