ホームページ  >  記事  >  バックエンド開発  >  PHP でのエラーおよび例外ログの使用方法の詳細な説明

PHP でのエラーおよび例外ログの使用方法の詳細な説明

墨辰丷
墨辰丷オリジナル
2018-06-01 16:03:031498ブラウズ

この記事では、PHP でのエラーと例外のログの使用法を主に紹介し、PHP でのエラーと例外の違いと、それに対応するログインの使用スキルを詳しく説明します。詳細は次のとおりです。 :

Nginx + PHP サービスのエラー ログというと、通常、Nginx のアクセス ログ、エラー ログ、PHP のエラー ログを思い浮かべます。非常に単純な質問のように見えますが、実際には、アプリケーションの構成とログの記録場所が関係します。apt-get を使用して ubuntu などのシステムにインストールする場合は、より適切な独自の構成ファイルが用意されています。さらに、実行中のアプリケーションの設定もログの方法と内容に影響します。

エラーと例外の違い

エラーと例外については、簡単な例を使用して理解できます:

<?php
try {
 1 / 0;
} catch (Exception $e) {
 echo "catched", PHP_EOL;
}

この小さな例を実行すると、直接「PHP 警告: pision by zero.. 。" 間違い。理由は簡単です。これは例外ではなく論理エラーであるため、try では捕捉できないからです。同様に、変数が使用前に定義されていない場合は、キャプチャされずに警告が生成されます。

しかし、この問題は PHP7 ではいくつか変更されています。たとえば、上記の例では / を % に変更しました。PHP7 環境で実行すると、次のような別のプロンプトが表示されます:

PHP Fatal error: Uncaught pisionByZeroError。

このヒントによると、catch の条件を変更すると:

<?php
try {
 1 / 0;
} catch (pisionByZeroError $e) {
 echo "catched", PHP_EOL;
}

このようにして、エラーは正常にキャプチャでき、catch が出力されます。

最初の例では、ExcepitonをErrorExceptionに変更すると正常にキャッチできるようになります。

PHP5 では剰余と除算が同じであるのに、PHP7 では除算が pisionByZeroError 問題ではない理由については (私のテスト環境は 7.0.4)、これはバグのはずです。

ログ記録

PHP 自体には以下の設定可能なログがあります:

① php-fpm エラーログ (php-fpm.conf で設定され、php-fpm プロセスの起動と終了などを記録します)

② php-fpm スロー ログ (これも php-fpm.conf で設定され、遅い実行を記録します)

③ php エラー ログ (php.ini で設定され、アプリケーション エラー ログを記録します)

さらに、Nginx には他に 2 つのオプションがあります 設定されたログ: アクセスそしてエラーログ。これらのログファイルは機能も記録内容も異なります。ただし、注意すべき点が 1 つあります。php-fpm でエラー ログの場所が設定されているが、そのログの場所が書き込み可能ではない場合 (php-fpm は起動時に確認するため、場所は設定中に正しい必要があります)、適切な設定条件 エラー ログは CGI に返され、nginx のエラー ログに書き込まれます。

したがって、問題が発生したときの一般的な検索方法は次のとおりです:

1. Nginx アクセス ログでリクエストのステータス コードを確認します。

2. PHP エラー ログでエラー レコードとスタック情報を確認します。

3. -fpm ログに異常な再起動レコードはありますか (コアまたは拡張の問題がある場合にこれが発生します)

しかし、上記の状況では、言及されたプログラムによってスローされた例外のログ レコードがないこともわかります。その上。

例外の記録

厳密に言えば、例外はエラーではなくアプリケーションロジックの例外であり、合理的なプログラムロジックを通じて手動でトリガーできます。ただし、ほとんどの場合、データベースに接続できないことやフレームワークの不適切な使用によって引き起こされる例外など、例外も記録する必要があります。問題を特定してタイムリーに処理するためには、ログを使用する必要があります。

PHP は、エラーおよび例外処理メソッドをカスタマイズするための 2 つの関数を提供します:

① set_error_handler

② set_Exception_handler

そのため、すべての例外は set_Exception_handler 関数注入メソッドを通じてキャプチャおよび記録できます。

monolog は優れた例外記録ライブラリであり、PSR-3 標準にも基づいています。 Laravel と Symfony では例外を記録するためにデフォルトで使用されます。必要に応じて、独自のプロジェクトへの導入を検討することもできます。

要約: 上記がこの記事の全内容です。皆様の学習に役立つことを願っています。

関連する推奨事項:

php抽象メソッドと抽象クラスインスタンスの詳細な説明

phpphpのfinalキーワードの使用方法の詳細な説明

phpUの賢者static キーワードと const キーワード

以上がPHP でのエラーおよび例外ログの使用方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。