私は今、会社でPHPのバックエンド開発プログラマーとして働いています(私たちのチームにはフロントエンドがないので、活動するときはフロントエンドのことをやります)。フロントエンドとバックエンドのアクティビティを実行するのに 2 週間 (当時はできなくて、週末 2 日残業しなければならなかったのを覚えています...、、、) もう 4 か月以上になります。もちろん、あまり複雑ではないアクティビティは午後 1 日で完了できます。もちろん、これを行う場合は、拡張性や再利用性など、多くのことを考慮します。小さなプラグインに似ているため、高速になります。 。 。 。 。 。しかし、一日中「要件に立ち向かい、要件を実行する」のは非常に効率が悪いことがわかりました。このようにすると、些細な要件に囚われて、いくつかの重要な部分を実行する時間がなくなり、システムやフレームワークのことを学ぶことができなくなります。そして、同僚や上司があなたがそれらのことをすることに慣れていると、技術的な内容ではないがやらなければならないことに遭遇するたびに、ためらうことなくそれをあなたに押し付けます(利己的に言えば、プログラマは誰でもそうです)みんな私と同じように、プログラマとしての誇りを持てるよう、技術的な内容を習得したいと思っているのです)、時間が経てば慣れてしまいます...これは本当に悲惨なので、受け入れます時間をかけてフレームワークの内容を学習し、単純なプログラマーにならないようにしてください。
引用
PHP フレームワークに触れたことのある友人は、プロジェクトにおけるログの重要な役割を知っているかもしれません。これは、エラーの場所を特定し、プログラムをより使いやすくするのに役立ちます (適切に処理されれば、直接ログがスローされることはありません)。プログラマのみのエラーが多い)実際は英語で動いています)、デバッグ中に非常に便利で、重要な操作などを記録することもできます。つまり、完全なプロジェクトにログシステムがない場合、開発の道は茨と穴だらけになることは間違いなく、つまずくでしょう。
はじめに
PHP ログ システムをマスターするには、まずこれらのことを完全に理解する必要があります。
1. 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)メソッドを使用します。
リーリー
2. ロギング関連ライブラリ
最初の部分で紹介したものは例外、エラー、シャットダウンのみをキャプチャします。これは最初のステップにすぎません。次に、ログ情報をローカル ファイル システムに記録するなど、キャプチャされた情報を適切に処理する必要があります。操作は 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 以上の記録レベルのエラーです。配列を渡すだけで、必要に応じてエラー ログを追加し、別のログ ディレクトリに分割できると思います。 :
ログとログライターの関係
上の図から、Log はさまざまな特定のログライター オブジェクトを含むコンテナであることがわかります。各オブジェクトは、エラー情報がファイルに書き込まれるときに、それぞれの Logwriter が実行されるかどうかを確認します。エラー メッセージにエラーを記録します。エラー メッセージ内のレベルがログライターに含まれていない場合、そのレベルは無視されます。
このパートは最初のパートとどのように連携しますか?実際、例外が例外によってキャッチされると、エラー メッセージ (エラーの場所、エラー コード、エラー メッセージなどを含む) を Log コンテナーの errormessage 配列に追加するために呼び出されます。プログラムの終了後にこの情報をファイルに書き込みます。kohana コードを読むと、1 つのエラーで複数のエラーが発生する可能性があるため、Kohana への直接書き込みが最適化されていないことがわかります。 php の実行でエラーが発生した場合は、一度記録するだけで済みます。これにより、プログラムが戻るまでに余分な IO と時間がかかります。そのため、kohana のアプローチでは、デフォルトですべてのエラー、例外、ログを Log::$errormessage に保存します。ライター操作は register_shutdown_function を登録します。この関数の機能は、上記の最初の部分でも使用されます。ログ レコードは、この PHP の実行に大きな影響を与えません。
3. 例の概要
この時点で、ログ システムの概要は理解できているはずです。使用する「ログ システム」を作成できます。これは、コードが含まれている私の「ログ システム」の例を見てみましょう。必要に応じて例をご覧ください。
https://github.com/AizuYan/phplog.git
この記事の著作権は著者(luluyrt@163.com)とブログパークに帰属します。記事を転載した後は、著者と原文リンクを明示する必要があります。記事ページに明確な立場がなければ、法的責任が追及されます。
上記では、PHP フレームワークのログ システムをその側面も含めて紹介しましたが、PHP チュートリアルに興味のある友人に役立つことを願っています。