Cursos Magento

Entenda o sistema de Logs no Magento 2

,

Atualizado em 17 de novembro de 2020

Este é o primeiro artigo da série sobre Logs no Magento 2. Veremos como usar as classes e métodos nativos para logar informações em arquivos no Magento 2.

Como vimos anteriormente aqui no Magenteiro, quando queremos gravar alguma informação em arquivo para fins de debug ou log no Magento 1, podíamos usar o método Mage::log.

Com a mudança estrutural do Magento 2 e a introdução da injeção de dependências (saiba tudo sobre DI na aula 21 do curso de Magento 2) o método estático Mage::log não está mais disponível.

Entendendo o sistema de log no Magento 2

Quem grava logs no Magento 2?

O Magento 2 possuí a classe \Psr\Log\LoggerInterface para gravar informações em arquivos de log. Mais especificamente no arquivo var/log/debug.log e var/log/system.log.

Mas se buscarmos informações de injeção de dependências desta classe, veremos que ela é substituída. Isto é feito através do uso de dependency injection.

Mostrando informações da preferência da classe de logs no Magento 2

Usando bin/magento dev:di:info para obter informações de injeção de dependências da classe de Log no Magento 2

Por isso, ao chamarmos a classe \Psr\Log\LoggerInterface, a classe que teremos é a \Magento\Framework\Logger\Monolog, injetada em magento2-base/app/etc/di.xml.

Por sua vez ela faz uso da classe Monolog, muito popular após o surgimento do composer no mundo PHP.

Os handlers de log no Monolog e no Magento 2

A classe Monolog suporta diversos “handlers“. Ou seja, ela permite que injetemos novas classes para tratar o que está sendo gravado onde e como quisermos. Vários desses handlers já estão disponíveis no packagist para os mais diversos fins e integrações com diversos serviços. Por exemplo, além de gravar logs em arquivos, também podemos enviar e-mails, gravar na base, etc.

Os handlers são processados em sequência. Cada handler na cadeia pode pegar a mensagem que está sendo gravada e quebrar a cadeia de handlers ou dar sequência ao próximo handler da sequência.

Uma das implementações nativas do Magento é o Magento\Developer\Model\Logger\Handler\Debug, que é adicionado aos $handlers do Monolog quando o debug está ativo em Advanced>Developer>Debug>Log to File (dev/debug/debug_logging).

Screenshot do Debug mostrando os handlers do Monolog

Screenshot do Debug mostrando os handlers do Monolog

Veja que no exemplo acima temos 2 handlers sendo chamados ao invocar o método debug (mostrado abaixo). Por isso, muitas vezes as mensagens de log são adicionadas tanto ao arquivo system.log como no debug.log.

Gravando logs no Magento 2

class SomeModel
 {
     private $logger;

     public function __construct(\Psr\Log\LoggerInterface $logger)
     {
         $this->logger = $logger;
     }

     public function doSomething()
     {
         try {
             //do something
         } catch (\Exception $e) {
             $this->logger->critical('Error message', ['exception' => $e]);
         }
     }
 }

A classe \Psr\Log\LoggerInterface possuí 8 métodos básicos nativos para gravar logs:
$this->logger->emergency('0: Emergency: system is unusable');
$this->logger->alert('1: Alert: action must be taken immediately');
$this->logger->critical('2: Critical: critical conditions');
$this->logger->error('3: Error: error conditions');
$this->logger->warning('4: Warning: warning conditions');
$this->logger->notice('5: Notice: normal but significant condition');
$this->logger->info('6: Informational: informational messages');
$this->logger->debug('7: Debug: debug-level messages'); //Debug precisa estar ativo

A criticidade dos logs são baseados na RFC-5424. No exemplo acima, listei cada um deles por ordem de importância.

Os primeiros 7 métodos gravarão informações de log no arquivo [pastamagento]/var/log/system.log, enquanto o último (debug) gravará em [pastamagento]/var/log/debug.log e só é gravado quando o debug está ativo em Advanced>Developer>Debug>Log to File (dev/debug/debug_logging).

No próximo artigo da série, veja como gravar arquivos de log customizados no Magento 2.

Últimos posts por Ricardo Martins (exibir todos)
Comentários

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/magento-2/logs-no-magento-2-como-funciona/"]