国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ バックエンド開発 PHPチュートリアル PHPマスター|再利用性を向上させるために、PSR-3でロギングします

PHPマスター|再利用性を向上させるために、PSR-3でロギングします

Feb 24, 2025 am 10:42 AM

PHP Master | Logging with PSR-3 to Improve Reusability

コアポイント

    一般的なログオブジェクトインターフェイスであるPSR-3を使用すると、開発者は特定のログ実裝に依存せずに再利用可能なコードを作成できるため、PHPの異なるログライブラリ間の互換性が向上します。
  • PSR-3インターフェイスは、さまざまな重大度レベルのメッセージを処理する8つの方法と、重大度レベルを受信できる一般的な
  • メソッドを提供します。その設(shè)計(jì)は、ログの実裝の非互換性の問題を解決することです。 log()
  • PSR-3には多くの利點(diǎn)がありますが、一部のログライブラリはネイティブにサポートしていません。ただし、開発者は、アダプターモードを活用し、PSR/Logライブラリで提供される
  • クラスを拡張することにより、PSR-3準(zhǔn)拠のアダプターを作成できます。 AbstractLogger
  • Monolog、Symfony、Moustache.phpを含む多くの主要なPHPプロジェクトがPSR-3のサポートを追加しました。コードの再利用の障壁を減らすため、より多くのライブラリとフレームワークがログを正しく使用し、開発者に有用な情報(bào)を提供することが期待されます。
  • PHP開発では、ロギングは最も一般的なタスクの1つです。ログを使用して、エラーメッセージを追跡し、重要なイベントを記録し、コードコードの問題をデバッグします。 PHPプロジェクトでは、コードには、これらの操作を処理するライブラリへの呼び出しが記載されている場(chǎng)合があります。殘念ながら、ログライブラリへの呼び出しはコード全體に散らばっているため、コードはライブラリの可用性に依存します。これは明らかに依存関係の反転の原則に反しています。依存関係の注入を使用してオブジェクトがログライブラリにアクセスできるようにしたとしても、ログライブラリ間の違いは、それらを切り替えることが難しくかつ時(shí)間がかかる可能性があり、コードライブラリ全體の主要なリファクタリングが必要です。ログライブラリ間の互換性を向上させるために、PHP-FIGチームは最近、一般的なログオブジェクトインターフェイスであるPSR-3をリリースしました。この記事では、PSR-3が定義されたログインターフェイスで、特定のログの実裝に依存しない再利用可能なコードを作成する方法について説明します。

psr-3クイックスタート

PSR-3がコードをより再利用可能にする方法を理解する前に、PSR-3とは何かを理解する必要があります。すでにPSR-3に精通している場(chǎng)合は、このセクションをスキップできます。仕様のコアは、オブジェクトをログするためのインターフェイスです。このインターフェイスは、異なる重大度レベルのメッセージを処理する8つの方法と、重大度レベルを受け入れる可能性のある一般的な

メソッドを開示します。 PSR-3でサポートされている8つの重大度レベルは、以下で説明するようにRFC 5424に基づいています。
  • emergency - システムは使用できません
  • alert - アクションが必要です
  • critical - 深刻な狀況
  • error - 即座に注意を必要としないが監(jiān)視する必要があるエラー
  • warning - 珍しいまたは望ましくないイベントですが、エラーではありません
  • notice - 通常の重要なイベント
  • info - 興味深いイベント
  • debug - デバッグの詳細(xì)

各ログメソッドは、文字列または__toString()メソッドを備えたオブジェクトでなければならないメッセージを受け入れます。追加のパラメーターは、ログメッセージのコンテキスト情報(bào)を提供できる配列を受け入れます。これらの方法とパラメーターの完全な説明は、PSR-3仕様に記載されています。

psr-3ファイルを取得

PSR -3を使用するために必要なファイルを取得するのは簡単です - PSR/Log GitHubリポジトリでそれらを見つけることができます。 Composerを使用して、これらのファイルをPackagistから取得することもできます。 PSR/ログファイルを取得するためのcomposer.jsonファイルの例を次に示します:

{
    "require": {
        "psr/log": "dev-master"
    }
}

ロギングのコードの再利用を制限する方法

PHPには、それぞれがデータを収集および記録する獨(dú)自の方法を備えたさまざまなログライブラリがあります。それらにはいくつかの共通點(diǎn)がありますが、各ライブラリには獨(dú)自のロギング方法のセットがあります。これは、ログを切り替えることは困難な場(chǎng)合があり、多くの場(chǎng)合、ロギングが使用されている場(chǎng)所でコードを変更する必要があることがよくあります。これは、コードの再利用とオブジェクト指向の設(shè)計(jì)の確固たる原理に反します。私たちが直面している狀況は、特定のログライブラリの依存関係を宣言するか、完全に記録することを避けることです。この問題をより明確に説明するには、特定の例が必要です。メールの送信を処理するシンプルなメーラーオブジェクトを作成しているとします。メールを送信するたびにメーラーにメッセージを記録してもらいたいので、優(yōu)れたモノログライブラリを使用してロギングのニーズを処理することにしました。

<?php namespace Email;

class Mailer
{
    private $logger;

    public function __construct($logger)
    {
        $this->logger = $logger;
    }

    public function sendEmail($emailAddress)
    {
        // 發(fā)送電子郵件的代碼...

        // 記錄消息
        $this->logger->addInfo("Email sent to $emailAddress");
    }
}

次のコードでこのクラスを使用できます。

このコードを?qū)g行すると、送信された電子メールが録音され、
<?php
// 創(chuàng)建一個(gè)Monolog對(duì)象
$logger = new Monolog\Logger("Mail");
$logger->pushHandler(new Monolog\Handler\StreamHandler("mail.log"));

// 創(chuàng)建郵件發(fā)送器并發(fā)送電子郵件
$mailer = new Email\Mailer($logger);
$mailer->sendEmail("email@example.com");
ファイルに新しいエントリが作成されます。この時(shí)點(diǎn)で、再利用可能なメーラーオブジェクトを書いたと思うかもしれません。依存関係の注入を使用して、メーラーでロガーを利用できるようにするため、メーラーコードに觸れずに異なるロガー構(gòu)成を交換できます。確かな原則に成功し、ハード依存関係の作成を避けたようです。ただし、アナログを使用してロギングインタラクションを処理するために、さまざまなプロジェクトでメーラークラスを再利用したいとします。アナログには

メソッドがないため、問題があります。アナログを使用して情報(bào)レベルのメッセージを記録するには、mail.logを呼び出します。以下に示すように、メーラークラスを変更してアナログメソッドを使用できます。 addInfo() Analog::log($message, Analog::INFO)

次のコードで更新されたメーラークラスを使用できます。
{
    "require": {
        "psr/log": "dev-master"
    }
}

これは機(jī)能しますが、理想とはほど遠(yuǎn)いものです。特定のロギングの実裝に対するメーラーの依存に遭遇しました。これには、新しいロガーを?qū)毪工毪趣衰楗工驂涓工氡匾ⅳ辘蓼?。これにより、クラスの再利用性が低下し、特定のロガーの可用性に依存するか、クラスのログを完全に放棄するかどうかを選択する必要があります。

PSR-3を使用して、ロガーの依存関係を避けます

アレハンドロ?ゲルヴァシオがトピックに関する彼の優(yōu)れた記事で説明しているように、依存関係の反転の原則は、具體的な実裝ではなく抽象化に依存するべきだと言っています。ロギングの場(chǎng)合、私たちの現(xiàn)在の問題は、依存できる適切な抽象化の欠如です。これは、PSR-3が登場(chǎng)する場(chǎng)所です。 PSR-3は、ロガーに共通のインターフェイスを提供することにより、ロギング実裝の非互換性を克服するように設(shè)計(jì)されています(適切に指名されたLoggerInterface)。特定の実裝に縛られていないインターフェイスを提供することにより、PSR-3を使用すると、特定のロガーに依存することを避けることができます。代わりに、LoggerInterface

<?php namespace Email;

class Mailer
{
    private $logger;

    public function __construct($logger)
    {
        $this->logger = $logger;
    }

    public function sendEmail($emailAddress)
    {
        // 發(fā)送電子郵件的代碼...

        // 記錄消息
        $this->logger->addInfo("Email sent to $emailAddress");
    }
}
コンストラクターは

実裝者を受け入れるように変更されており、LoggerInterfaceメソッドを呼び出すsendEmail()メソッドが呼び出されました。 MonologはすでにPSR-3に準(zhǔn)拠しており、アナログはinfo()を?qū)g裝するラッパーオブジェクトを提供するため、メーラークラスを変更せずにこれら2つのロガーを使用できるようになりました。モノログを使用してこのクラスを呼び出す方法は次のとおりです。 LoggerInterface

and Analog:
<?php
// 創(chuàng)建一個(gè)Monolog對(duì)象
$logger = new Monolog\Logger("Mail");
$logger->pushHandler(new Monolog\Handler\StreamHandler("mail.log"));

// 創(chuàng)建郵件發(fā)送器并發(fā)送電子郵件
$mailer = new Email\Mailer($logger);
$mailer->sendEmail("email@example.com");
を使用します

メーラークラスを編集したり、使用方法を変更せずに、ライブラリでメーラーオブジェクトを使用することができます。
<?php namespace Email;

class Mailer
{
    public function sendEmail($emailAddress)
    {
        // 發(fā)送電子郵件的代碼...

        // 記錄消息
        Analog::log("Email sent to $emailAddress", Analog::INFO);
    }
}

PSR-3 <

これまでのところ、を要求する実裝者を介して、特定のロギングの実裝からメーラーオブジェクトを正常に分離しました。しかし、PSR-3サポートのためにまだ追加されていないロガーについてはどうでしょうか?たとえば、人気のあるKloggerライブラリはしばらく更新されておらず、現(xiàn)在PSR-3と互換性がありません。幸いなことに、アダプターパターンを活用することにより、Kloggerによって公開されたメソッドをで定義されたメソッドに簡単にマッピングできます。 PSR/Logリポジトリでサポートされているファイルを使用すると、拡張できる

クラスを提供することにより、アダプタークラスを簡単に作成できます。抽象クラスは、

で定義された8つのレベル固有のログメソッドを一般的なLoggerInterfaceメソッドに転送するだけです。 LoggerInterfaceクラスを拡張し、獨(dú)自のAbstractLoggerメソッドを定義することにより、PSR-3をネイティブにサポートしていないロガー用のPSR-3準(zhǔn)拠のアダプターを簡単に作成できます。 Klogger用のシンプルなアダプターを作成して、これを以下に示します:LoggerInterface

{
    "require": {
        "psr/log": "dev-master"
    }
}

log()メソッドは、単にLoggerInterfaceメソッドをそれぞれのKloggerメソッドにマップするだけで、Kloggerは実際のロギングアクティビティを処理します。この方法でKloggerクラスをラッピングすることにより、LoggerInterface契約を破らずに使用できます。これで、メーラークラスでKloggerアダプターを使用できます。

<?php namespace Email;

class Mailer
{
    private $logger;

    public function __construct($logger)
    {
        $this->logger = $logger;
    }

    public function sendEmail($emailAddress)
    {
        // 發(fā)送電子郵件的代碼...

        // 記錄消息
        $this->logger->addInfo("Email sent to $emailAddress");
    }
}
Adapterクラスを使用すると、メーラークラスを変更せずにKloggerを使用しても、

に付著することができます。 Kloggerはデバッグレベルメッセージの2番目のパラメーターを受け入れないため、アダプターを使用してもPSR-3に完全に準(zhǔn)拠していません。 Kloggerを拡張してPSR-3と完全に互換性のあるものにすることは些細(xì)な作業(yè)ですが、それはこの記事の範(fàn)囲を超えています。ただし、アダプタークラスを使用すると、完全にPSR-3に準(zhǔn)拠することに非常に近づき、KloggerクラスでLoggerInterfaceを使用できるようになると言っても安全です。 LoggerInterface

結(jié)論 この記事では、PSR-3を使用して、特定のロギングの実裝に依存しないロガーフリーコードを作成するのに役立つ方法を?qū)Wびました。多くの主要なPHPプロジェクトが、Monolog、Symfony、Moustache.phpを含むPSR-3のサポートを追加しており、Drupalのような他の有名なプロジェクトでは、それを最適に統(tǒng)合する方法について議論しています。 PSR-3はコードの再利用の障壁を減らすため、より多くのライブラリとフレームワークがロギングを使用して、開発者に有用な情報(bào)を提供する必要があります。 PSR-3は、アプリケーションでのロギングの使用方法に影響しますか?以下のコメントセクションでお知らせください。

(フォトリアからの寫真)

(スペースの制限のため、PSR-3ロギングのFAQ部分はここで省略されています。必要に応じて追加できます。

以上がPHPマスター|再利用性を向上させるために、PSR-3でロギングしますの詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPに認(rèn)証と承認(rèn)を?qū)g裝するにはどうすればよいですか? PHPに認(rèn)証と承認(rèn)を?qū)g裝するにはどうすればよいですか? Jun 20, 2025 am 01:03 AM

tosecurelyhandLeauthenticationAndauthorizationInizationInization、followTheSteps:1.LwayShashPasswordswithPassword_hash()andverifyusingpassword_verify()、usepreparedStatementStatementStatementStatementStatementStain、andstoreUserdatain $ _SessionAfterlogin.2.implementRementRementRementRementRementRementRementRole

PHPでファイルアップロードを安全に処理するにはどうすればよいですか? PHPでファイルアップロードを安全に処理するにはどうすればよいですか? Jun 19, 2025 am 01:05 AM

PHPでファイルアップロードを安全に処理するために、コアはファイルタイプを確認(rèn)し、ファイルの名前を変更し、権限を制限することです。 1。Finfo_File()を使用して実際のMIMEタイプを確認(rèn)し、Image/JPEGなどの特定のタイプのみが許可されます。 2。uniqid()を使用してランダムファイル名を生成し、非webルートディレクトリに保存します。 3. PHP.iniおよびHTMLフォームを介してファイルサイズを制限し、ディレクトリ権限を0755に設(shè)定します。 4. Clamavを使用してマルウェアをスキャンしてセキュリティを強(qiáng)化します。これらの手順は、セキュリティの脆弱性を効果的に防止し、ファイルのアップロードプロセスが安全で信頼性が高いことを確認(rèn)します。

PHPの==(ゆるい比較)と===(厳密な比較)の違いは何ですか? PHPの==(ゆるい比較)と===(厳密な比較)の違いは何ですか? Jun 19, 2025 am 01:07 AM

PHPでは、==と==の主な違いは、タイプチェックの厳格さです。 ==タイプ変換は比較の前に実行されます。たとえば、5 == "5"はtrueを返します。===リクエストは、trueが返される前に値とタイプが同じであることを要求します。たとえば、5 === "5"はfalseを返します。使用シナリオでは、===はより安全で、最初に使用する必要があります。==は、タイプ変換が必要な場(chǎng)合にのみ使用されます。

PHPのNOSQLデータベース(Mongodb、Redisなど)とどのように対話できますか? PHPのNOSQLデータベース(Mongodb、Redisなど)とどのように対話できますか? Jun 19, 2025 am 01:07 AM

はい、PHPは、特定の拡張機(jī)能またはライブラリを使用して、MongoDBやRedisなどのNOSQLデータベースと対話できます。まず、MongoDBPHPドライバー(PECLまたはComposerを介してインストール)を使用して、クライアントインスタンスを作成し、データベースとコレクションを操作し、挿入、クエリ、集約、その他の操作をサポートします。第二に、PredisライブラリまたはPhpredis拡張機(jī)能を使用してRedisに接続し、キー価値設(shè)定と取得を?qū)g行し、高性能シナリオにPhpredisを推奨しますが、Predisは迅速な展開に便利です。どちらも生産環(huán)境に適しており、十分に文書化されています。

PHP(、 - 、 *、 /、%)で算術(shù)操作を?qū)g行するにはどうすればよいですか? PHP(、 - 、 *、 /、%)で算術(shù)操作を?qū)g行するにはどうすればよいですか? Jun 19, 2025 pm 05:13 PM

PHPで基本的な數(shù)學(xué)操作を使用する方法は次のとおりです。1。追加標(biāo)識(shí)は、整數(shù)と浮動(dòng)小數(shù)點(diǎn)數(shù)をサポートし、変數(shù)にも使用できます。文字列番號(hào)は自動(dòng)的に変換されますが、依存関係には推奨されません。 2。減算標(biāo)識(shí)の使用 - 標(biāo)識(shí)、変數(shù)は同じであり、タイプ変換も適用されます。 3.乗算サインは、數(shù)字や類似の文字列に適した標(biāo)識(shí)を使用します。 4.分割はゼロで割らないようにする必要がある分割 /標(biāo)識(shí)を使用し、結(jié)果は浮動(dòng)小數(shù)點(diǎn)數(shù)である可能性があることに注意してください。 5.モジュラス標(biāo)識(shí)を採取することは、奇妙な數(shù)と偶數(shù)を判斷するために使用でき、負(fù)の數(shù)を処理する場(chǎng)合、殘りの兆候は配當(dāng)と一致しています。これらの演算子を正しく使用するための鍵は、データ型が明確であり、境界の狀況がうまく処理されるようにすることです。

最新のPHP開発とベストプラクティスを最新の狀態(tài)に保つにはどうすればよいですか? 最新のPHP開発とベストプラクティスを最新の狀態(tài)に保つにはどうすればよいですか? Jun 23, 2025 am 12:56 AM

postaycurrentwithpdevellyments andbest practices、follow keynewsourceslikephp.netandphpweekly、egagewithcommunitiessonforums andconferences、keeptooling and gradivallyadoptnewfeatures、andreadorcontributeTopensourceprijeprijeprijeptrijeprijeprests.

PHPとは何ですか、そしてなぜそれがWeb開発に使用されるのですか? PHPとは何ですか、そしてなぜそれがWeb開発に使用されるのですか? Jun 23, 2025 am 12:55 AM

PhpBecamepopularforwebdevelopmentduetoitseaseaseaseaseasease、SeamlessintegrationWithhtml、widespreadhostingsupport、andalargeecosystemincludingframeworkelavelandcmsplatformslikewordspresspressinsinsionsisionsisionsisionsisionsionsionsisionsionsionsisionsisions

PHPタイムゾーンを設(shè)定する方法は? PHPタイムゾーンを設(shè)定する方法は? Jun 25, 2025 am 01:00 AM

tosettherighttimezoneInphp、usedate_default_timezone_set()functionthestthestofyourscriptwithavalididentifiersiersuchas'america/new_york'.1.usedate_default_timezone_set()beforeanydate/timefunctions.2.2.Altertentally、confuturethephp.inifilebyset.

See all articles