毎日のPHP開発では、プログラムで例外に遭遇することがよくあります。問題を迅速に見つけるために、PHPは例外クラスの非常に実用的な方法を提供します: getTraceAsString() 。スタックトレース情報を文字列出力にフォーマットし、開発者がエラーの発生とコールチェーンをすばやく理解できるようにします。
例外がキャッチされたら、 getTraceAsString()を直接使用してスタック情報を取得できます。
<code> try {//例外をシミュレートスロー新しい例外( "テストエラー"); } catch(例外$ e){echo $ e-> getTraceAsstring(); } </code>出力は以下に似ています。
#0 /var/www/html/test.php(3): throw new Exception('テストエラー')
#1 {main}
これはすでに基本的な情報を提供していますが、実際のアプリケーションでは、多くの場合、より多くのコンテキストを確認し、現在ログインしているユーザー、要求されているURL、パラメーターなど、問題をより速く見つけるためにカスタムフィールドを追加したいと考えています。
より詳細なエラーレポートを生成するために、エラー処理機能を自分でカプセル化し、 getTraceAsString()の情報を他の診断情報と統合できます。例えば:
<code>関数logexceptiondetailed(例外$ e){$ log = []; $ log [] = "time:"。日付( 'ymd h:i:s'); $ log [] = "エラーメッセージ:"。 $ e-> getMessage(); $ log [] = "file:"。 $ e-> getFile()。 "" ""。$ e-> getline()。 "line"; $ log [] = "request url:http://m66.net"。$ _server ['request_uri']; $ log [] = "user ip:"。 json_unescaped_unicode); file_put_contents(__DIR__ . '/error.log', implode("\n", $log) . "\n\n", FILE_APPEND);
}
</code>
プログラムでの使用:
<code> try {//エラーがある可能性のあるsomeriskyfunction()がここで実行されるとします。 } catch(例外$ e){logexceptiondetailed($ e);エコー「システムエラーが発生したので、後でもう一度やり直してください。」; } </code>このようにして、エラーコンテキストを記録し、スタックをそのままに呼び出します。これにより、生産環境でも問題をよりよく再現および分析できます。
重要なシステムでは、エラーが発生した後、ログを記録するだけでなく、リアルタイムで開発者に通知する必要がある場合があります。上記のlogexceptiondetailed関数を拡張したり、電子メールを送信したり、リモートインターフェイス(エンタープライズWechat、Dingtalk、または独自の通知システムなど)を呼び出すことができます。
<code> function notifydevteam($ message){$ url = "https://api.m66.net/notify"; //サンプルインターフェイス$ data = ['msg' => $ message]; $opts = [
"http" => [
"method" => "POST",
"header" => "Content-Type: application/json",
"content" => json_encode($data)
]
];
file_get_contents($url, false, stream_context_create($opts));
}
</code>
ロギング後に追加します:
<code> notifyDevteam(inprode( "\ n"、$ log)); </code>getTraceAsString()を使用すると、例外のコールスタック情報を取得できます。これは、デバッグに非常に役立ちます。コンテキスト情報、カスタム形式、ロギング、通知メカニズムを組み合わせて、完全なエラーレポートシステムを構築できます。これにより、何か問題が発生したときにできるだけ早く問題を知ることができるだけでなく、検査効率を大幅に改善することができます。これは、すべてのPHPプロジェクトに追加する機能です。