Magento 2: `psr \ log \ loggerInterface`タイプでプラグインを使用できますか?
-
13-12-2019 - |
質問
このようなものに見える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フォルダにはありません。そのため、コンパイラによって分析されず、プロダクションモードではプラグインされません。サードパーティクラスの動作をプラグイン/設定する場合は、アダプタを使用する必要があります。
所属していません magento.stackexchange