No Magento 1, era comum segmentar logs em arquivos diferentes (para separar logs para métodos de pagamento, etc.). É tão fácil quanto mudar o $file
parâmetro de Mage::log
.
Magento 2 mudou para usar o Monolog.
Parece que o Monolog (ou a implementação do Magento2) segmenta todos os logs de todo o framework para manipuladores por gravidade. Existem alguns manipuladores que gravam no arquivo:
\Magento\Framework\Logger\Handler\Debug
, \Magento\Framework\Logger\Handler\Exception
,\Magento\Framework\Logger\Handler\System
Registrando nos arquivos respectivos em var / log como no Magento 1.
Eu poderia adicionar um manipulador para uma determinada gravidade (IE, escrever avisos para var/log/notice.log
). Estenda \Magento\Framework\Logger\Handler\Base
e registre o manipulador di.xml
.
Este artigo descreve aproximadamente esse processo: http://semaphoresoftware.kinja.com/how-to-create-a-custom-log-in-magento-2-1704130912
Mas como eu escrevo todos os logs (não apenas uma gravidade) para uma classe (nem todo o Magento) no meu arquivo de escolha?
Parece que terei que criar minha própria versão Magento\Framework\Logger\Monolog
, mas como tudo se encaixa para que realmente funcione?
Se este é um grande não-não no Magento 2, então qual é a alternativa? Eu quero algo para separar os logs dessa extensão com o objetivo de depurá-la quando necessário nos sites do cliente. Ter essas informações gravadas em system.log, exception.log etc. e misturadas com os logs de todos os outros módulos não é prático.
Podemos registrar dados em um arquivo como este.
fonte
A maneira mais simples possível:
fonte
Além das respostas de Halk e Pradeep Kumar: se de fato sua única preocupação é registrar-se em um arquivo diferente, existe uma maneira um pouco mais fácil. Especialmente se você deseja incorporar isso a vários módulos ou se deseja arquivos de log diferentes dentro do seu módulo. Com esse método, você não precisa criar manipuladores personalizados.
Supondo que seu módulo esteja
MyNamespace/MyModule
e que a classe, que você deseja registrar em um arquivo personalizado, seja chamadaMyClass
. Se o construtor da classe já injetar,\Psr\Log\LoggerInterface
pule para a etapa 2). Caso contrário, você precisará injetá-lo no construtor:1) Injete o LoggerInterface em sua classe
MyClass.php
:Se você estender uma classe que já inclua um criador de logs (como
\Magento\Framework\App\Helper\AbstractHelper
), poderá substituir esse membro (geralmente$_logger
) em vez de usar outro. Basta adicionar$this->_logger = $logger
após a diretiva do construtor pai.2) Configure o logger via injeção de dependência
etc/di.xml
:Isso registrará tudo no
/var/log/mymodule.log
.Se você precisar fazer logon em um arquivo diferente para uma classe diferente, basta criar outro criador de logs virtual com outro manipulador virtual e injetá-lo nessa classe.
fonte
Se você precisar apenas da sua classe:
fonte
Experimente o módulo " praxigento / mage2_ext_logging ". Este módulo adiciona o suporte "Monolog Cascade" ao Magento 2. "Monolog Cascade" permite configurar a saída de log com um único arquivo de configuração. Você pode imprimir seus registros em diferentes arquivos, bancos de dados, enviar alertas por e-mail e etc. sem modificar seu próprio código.
Esta é uma amostra do arquivo de configuração ('var / log / logging.yaml' por padrão):
fonte
Se não houver alteração lógica e apenas for necessário alterar um nome de arquivo de log personalizado, não será necessário criar uma classe de logger personalizada, apenas siga as etapas abaixo
1. em di.xml
2. Manipulador
onde quer que você precise registrar os dados, é necessário chamar o registro PSR padrão
que é
Então, o exemplo acima registrará todos os dados de depuração no test.log, se você precisar alterar o sistema, também poderá adicionar a linha abaixo em di.xml
fonte
Eu tentei isso abaixo do código do objeto do registrador em um módulo de terceiros onde desejo obter as informações de log que coloquei e colocá-las no arquivo custom.log, verifique esse código, você definitivamente obtém os logs no seu arquivo de log personalizado.
Se você precisar de mais informações, comentar aqui, eu responderei. Obrigado.
fonte