Magento 2: `psr \ log \ loggerInterface`タイプでプラグインを使用できますか?

magento.stackexchange https://magento.stackexchange.com//questions/93046

質問

このようなものに見えるdi.xmlを持っています

<config>
<type name="Psr\Log\LoggerInterface">                
    <plugin name="namespace_modulename_plugins_psr"
            type="Namespace\Modulename\Plugins\Psr"
            sortOrder="10"
            disabled="false"/>     
</type>
</config>
.

Namespace\Modulename\Plugins\Psrクラスをインスタンス化することができ、beforeInfoメソッドが定義されている

public function beforeInfo($subject)
{
    var_dump(__METHOD__);
    exit;
}
.

しかし、ロガーを挿入してそれを使用してみてください

/* @var $psr `Psr\Log\LoggerInterface` */
$psr->info("This is a message");
.

メッセージが正常にログに記録されますが、システムはプラグインメソッドを呼び出しません。

プラグイン可能なPsr\Log\LoggerInterfaceについての特別なものはありますか?そうでない場合は、プラグイン構成の問題をデバッグするためのSolid Methodologyがありますか?

役に立ちましたか?

解決 2

少し研究の後、それはPsr\Log\LoggerInterface(そしてその基礎となる具体的なMonolog実装クラス)を消えることができます。問題は、開発者モードが有効になっている場合、完全なDIコンパイルを実行する必要があります(このバグを参照してください。/ a>)。

を実行する
php bin/magento setup:di:compile
.

は、生成されたインターセプターを取得し、プラグインが機能します。

他のヒント

PSR\Log\LoggerInterfaceはMagento ModuleまたはFrameworkフォルダにはありません。そのため、コンパイラによって分析されず、プロダクションモードではプラグインされません。サードパーティクラスの動作をプラグイン/設定する場合は、アダプタを使用する必要があります。

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top