Magento2:Puoi utilizzare un plugin con il tipo `Psr\Log\LoggerInterface`?
-
13-12-2019 - |
Domanda
Ho un di.xml che assomiglia a questo
<config>
<type name="Psr\Log\LoggerInterface">
<plugin name="namespace_modulename_plugins_psr"
type="Namespace\Modulename\Plugins\Psr"
sortOrder="10"
disabled="false"/>
</type>
</config>
IL Namespace\Modulename\Plugins\Psr
la classe può essere istanziata e ha un file beforeInfo
metodo definito
public function beforeInfo($subject)
{
var_dump(__METHOD__);
exit;
}
Tuttavia, se inserisco un logger e provo a usarlo
/* @var $psr `Psr\Log\LoggerInterface` */
$psr->info("This is a message");
Il messaggio verrà registrato correttamente, ma il sistema non chiama il mio metodo plugin.
C'è qualcosa di speciale in Psr\Log\LoggerInterface
che rende non plug-in in grado?In caso contrario, qualcuno dispone di una solida metodologia per il debug dei problemi di configurazione del plug-in?
Soluzione 2
Dopo un po' di ricerca, si scopre che Psr\Log\LoggerInterface
(e il suo cemento sottostante Monolog
classe di implementazione) Potere essere collegato.Il problema era che, se hai abilitato la modalità sviluppatore, devi eseguire una compilazione completa (vedi questo bug).Corsa
php bin/magento setup:di:compile
dovrebbe generare gli intercettori e far funzionare i plugin.
Altri suggerimenti
PSR\Log\LoggerInterface
non è in Modulo Magento o Cartella quadro.Quindi non è analizzato dal compilatore e non verrà pluginizzato in modalità di produzione.Se si desidera inserire / configurare il comportamento delle classi di terze parti, è necessario utilizzare l'adattatore.