Magento2 :Pouvez-vous utiliser un plugin de type `Psr\Log\LoggerInterface` ?
-
13-12-2019 - |
Question
J'ai un di.xml qui ressemble à ceci
<config>
<type name="Psr\Log\LoggerInterface">
<plugin name="namespace_modulename_plugins_psr"
type="Namespace\Modulename\Plugins\Psr"
sortOrder="10"
disabled="false"/>
</type>
</config>
Le Namespace\Modulename\Plugins\Psr
la classe peut être instanciée et possède un beforeInfo
méthode définie
public function beforeInfo($subject)
{
var_dump(__METHOD__);
exit;
}
Cependant, si j'injecte un enregistreur et que j'essaie de l'utiliser
/* @var $psr `Psr\Log\LoggerInterface` */
$psr->info("This is a message");
Le message sera enregistré avec succès, mais le système n'appelle pas ma méthode de plugin.
Y a-t-il quelque chose de spécial dans le Psr\Log\LoggerInterface
cela rend-il non plug-in ?Sinon, quelqu'un a-t-il une méthodologie solide pour déboguer les problèmes de configuration du plugin ?
La solution 2
Après quelques recherches, il s'avère que Psr\Log\LoggerInterface
(et son béton sous-jacent Monolog
classe d'implémentation) peut être branché.Le problème était que si le mode développeur était activé, vous deviez effectuer une compilation complète (voir ce bug).En cours d'exécution
php bin/magento setup:di:compile
devrait générer les intercepteurs et faire fonctionner les plugins.
Autres conseils
PSR\Log\LoggerInterface
n'est pas dans le module magento ou dans le dossier framework.Il n'est donc pas analysé par le compilateur et ne sera pas pluginisé en mode production.Si vous souhaitez pluginiser/configurer le comportement de classes tierces, vous devez utiliser l'adaptateur.