私は今、会社で PHP バックエンド開発プログラマーとして働いています (私たちのチームにはフロントエンドがないので、活動するときにフロントエンドのことを行います)。最初に会社に来たときは、時間がかかりました。フロントエンドとバックエンドのアクティビティを実行するのに 2 週間 (当時はできなくて、週末 2 日残業しなければならなかったのを覚えています...、、、) もう 4 か月以上になります。もちろん、あまり複雑ではないアクティビティは午後 1 日で完了できます。もちろん、これを行う場合は、拡張性や再利用性など、多くのことを考慮します。小さなプラグインに似ているため、高速になります。 。 。 。 。 。しかし、一日中「要件に沿って立ち上がって要件を実行する」のは非常に悪いことであることがわかりました。この方法では、システムやフレームワークのことを学ぶことができなくなります。なぜなら、些細な要件に囚われて、重要な部分を実行する時間がなくなるからです。そして、同僚や上司があなたがそれらのことをすることに慣れていると、技術的な内容はないがやらなければならないことに遭遇するたびに、ためらうことなくそれをあなたに押し付けます(利己的に言えば、プログラマーは誰でも同じです)。 (私と同じように、プログラマとしての誇りを持てるように、技術的な内容を習得したいのです)、時間が経つと慣れてしまいます...これは本当に悲惨なので、削除します時間をかけてフレームワークの内容を学習し、単純なプログラマーにならないようにしてください。
PHP フレームワークに触れたことのある友人は、プロジェクトにおけるログの重要な役割を知っているかもしれません。これは、エラーの場所を特定し、プログラムをより使いやすくするのに役立ちます (適切に処理されれば、直接エラーがスローされることはありません)。エラーが多い(プログラマのみ)実際は英語で動いています)、デバッグ中に非常に便利で、重要な操作などを記録することもできます。つまり、完全なプロジェクトにログシステムがなければ、開発ロードは長くなります。とげと穴だらけになるでしょう、間違いなくつまずくでしょう。
PHP ログ システムをマスターするには、まずこれらのことを完全に理解する必要があります。
1 set_Exception_handler(callback $Exception_handler); //例外キャプチャカスタムハンドラー関数の登録
1 set_error_handler(callback $error_handler); //エラーキャプチャカスタムハンドラー関数の登録
1 register_shutdown_function(callback $callback); //プログラム実行時の異常終了エラーキャプチャハンドラ関数の登録
これら 3 つの関数は、開発者にエラー処理制御において多くの自主性を提供し、ログ システムにログ情報を記録する責任を負います。
プログラムで例外が発生すると、PHP カーネルは例外エラーをスローし、例外処理関数が登録されている場合、PHP によってスローされた例外はカスタム登録された例外に転送されます。例外キャッチ関数。この関数には実行する必要のある処理が含まれており、エラー情報 (エラーの詳細とエラーの場所を含む) が記録されます。この関数が例外を処理した後、例外は終了します。
プログラム内でエラーが発生した場合、登録したエラー処理関数はエラー情報を関数内のエラー例外オブジェクトに変換し、例外処理関数に渡します。これが最初のステップの $Exception_handler 関数です。
再開時にシャットダウンエラーが発生した場合、登録した異常終了処理関数が実行され、error_get_last()により前回のシャットダウン時のエラーオブジェクトを取得し、前項と同様にエラー例外オブジェクトを生成します。このオブジェクトは、登録された例外ハンドラー関数に渡されます。
実際には、例外であってもエラーであっても、自身の情報を例外処理関数が認識する例外情報に変換して、例外処理関数に渡して処理していることが分かります。例外情報は、化粧をした女性のようなものです。例外ハンドラは、非例外情報がロードおよびアンロードされるときのみ、例外情報を認識しません(正確には、非例外情報はそれ自体で例外情報に変換されます)。スローされたか) 例外ハンドラーはそれを認識できますか。
PHPログシステムのエラー処理プロセス
そこで質問になりますが、これらの関数は通常、例外処理クラス ライブラリとエラー ログ クラス ライブラリで動作します。例外処理クラス ライブラリには、登録される 3 つの関数と、$Exception_handler で呼び出されるログ クラス ライブラリが含まれています。ログファイルを合理的に記録して配置するため。上記の関数は通常、次のようにプログラムフレームワークの入り口でロードされ、登録されます。
ここではarray(class,function)メソッドが使用されています。 最初の部分で紹介したものは例外、エラー、シャットダウンのみをキャプチャします。これは最初のステップにすぎません。次に、ログ情報をローカル ファイル システムに記録するなど、キャプチャされた情報を適切に処理する必要があります。操作は array("MyException", "ExceptionHandler")) 内にあり、ログ クラス ライブラリが使用されます。 (以下で説明するクラス ライブラリは、kohana ログ システムの設計を利用しています)。 日本語形式のログもファイルの最後に情報を追加するだけで簡単に実装できると思いますが、設計が必要です。便利で効率的で拡張されたロギング クラス ライブラリですが、これはそれほど単純ではありません。長期にわたる実践、要約、最適化が必要です。kohana フレームワークのロギング ライブラリは比較的成熟しているため、ここで参照できます。 kohana を使用したことのあるユーザーは、kohana フレームワークでのログインについてよく知っていると思います。詳しくなくても問題ありません。アプリケーションの 109 番で簡単に説明します。 kohana ソース コードの bootstrap.php ファイル — 112 行目に次のコードがあります: これは、log オブジェクト に logging オブジェクト を追加するものです。オリーブ色の背景を持つ 2 つは、kohana では 2 つの部分に分かれていることに注意してください。ログ オブジェクトは、ログ オブジェクトのリストを維持するために使用されます。これは実際には 1 つ以上のログ オブジェクトを含むコンテナのようなものです (これは 2 番目の部分です。これらのログ オブジェクトがログの実際のソースです)。オブジェクト)、ログ)、および各オブジェクトについて記録されるエラー レベルの配列。エラー レベルが満たされていない場合は省略されます。名前を変更した後の私自身の簡略化されたロギング方法は次のとおりです: ここでわかりやすくするために、「コンテナ」に Log という名前を付け、記録されたインスタンスに Logwriter という名前を付けました。最初のログ タイプは、すべてのエラーをエラー番号とともに記録するものです。 Log::DEBUG より小さいエラー (エラー レベルがそれより高い) は、ルールに従って ./data/debug フォルダーに記録されます。2 番目は Log::NOTICE 以上の記録レベルのエラーです。配列を渡すだけで、必要に応じてエラー ログを追加し、別のログ ディレクトリに分割できると思います。 : 3. 例の概要2. ロギング関連ライブラリ
この時点で、ログ システムについて一般的に理解しているはずです。すでに使用する「ログ システム」を作成できます。これは、次の github アドレスを含む「ログ システム」の例を見てみましょう。必要に応じてコードと例を参照してください。
https://github.com/AizuYan/phplog.gitこの記事の著作権は作者(luluyrt@163.com)とブログパークに帰属し、作者の許可なく転載することを禁じます。記事を転載する場合は、記事内に著者へのリンクと原文を含める必要があります。ページ上のわかりやすい場所にリンクを記載しないと、当社は法的責任を追及する権利を留保します。