Magento2:Você pode usar um plugin com o tipo `Psr\Log\LoggerInterface`?
-
13-12-2019 - |
Pergunta
Eu tenho um di.xml parecido com isto
<config>
<type name="Psr\Log\LoggerInterface">
<plugin name="namespace_modulename_plugins_psr"
type="Namespace\Modulename\Plugins\Psr"
sortOrder="10"
disabled="false"/>
</type>
</config>
O Namespace\Modulename\Plugins\Psr
classe pode ser instanciada e tem um beforeInfo
método definido
public function beforeInfo($subject)
{
var_dump(__METHOD__);
exit;
}
No entanto, se eu injetar um logger e tentar usá-lo
/* @var $psr `Psr\Log\LoggerInterface` */
$psr->info("This is a message");
A mensagem será registrada com sucesso, mas o sistema não chama meu método de plugin.
Existe algo especial sobre o Psr\Log\LoggerInterface
isso faz com que não seja compatível com plugins?Caso contrário, alguém tem uma metodologia sólida para depurar problemas de configuração de plugins?
Solução 2
Depois de um pouco de pesquisa, descobriu-se que Psr\Log\LoggerInterface
(e seu concreto subjacente Monolog
classe de implementação) pode estar conectado.O problema era que, se você tiver o modo de desenvolvedor ativado, precisará fazer uma compilação completa (veja esse bug).Correndo
php bin/magento setup:di:compile
deve gerar os interceptadores e os plugins funcionando.
Outras dicas
PSR\Log\LoggerInterface
não está no módulo magento ou na pasta do framework.Portanto, não é analisado pelo compilador e não será pluginizado no modo de produção.Se você deseja pluginizar/configurar o comportamento de classes de terceiros, você deve usar o adaptador.