Contextualizando
O que é um log?
Log de dados é uma expressão utilizada para descrever o processo de registro de eventos relevantes num sistema computacional. Esse registro pode ser utilizado para restabelecer o estado original de um sistema ou para que um administrador conheça o seu comportamento no passado. Um arquivo de log pode ser utilizado para auditoria e diagnóstico de problemas em sistemas computacionais
Wikipedia
Existem inúmeras formas da criação de logs, a convenção adotada pela comunidade do PHP se tornou uma PSR e o Magento 2 a utiliza por padrão, implementando a interface \Psr\Log\LoggerInterface
. Saiba mais a página oficial sobre na PSR-3 - Logger Interface.
Código para criar um Log
Para criar um log personalizado no Magento 2 é necessário estender a classe por padrão \Monolog\Logger
que implementa a \Psr\Log\LoggerInterface
. Este tipo de arquivo deve seguir a estruturas de pastas \{Vendor}\{Module}\Logger\{Loggername}.php
.
Caso seja necessário criar algum novo tipo de log é neste arquivo que será implementado o método e/ou o nome, tipo e valor do log.
<?php
namespace {Vendor}\{Module}\Logger;
use Monolog\Logger;
class {Loggername} extends Logger
{
public const {CUSTOM_LOG_NAME} = {VALUE};
protected static array $levels = [
self::DEBUG => 'DEBUG',
self::INFO => 'INFO',
self::NOTICE => 'NOTICE',
self::WARNING => 'WARNING',
self::ERROR => 'ERROR',
self::CRITICAL => 'CRITICAL',
self::ALERT => 'ALERT',
self::EMERGENCY => 'EMERGENCY',
self::{CUSTOM_LOG_NAME} => '{CUSTOM_LOG_NAME}',
];
public function {methodName}(string $message, array $context = []): bool
{
return $this->addRecord(static::{CUSTOM_LOG_NAME}, $message, $context);
}
}
Handler
A classe Handler define o tipo do log e o caminho do arquivo que será criado para a gravação das mensagens. O caminho do arquivo inicia a partir do diretório raiz do Magento. Este tipo de arquivo deve seguir a estruturas de pastas \{Vendor}\{Module}\Logger\{HandlerName}.php
. Cada arquivo de Handler deve estender a classe \Magento\Framework\Logger\Handler\Base
.
<?php
namespace {Vendor}\{Module}\Logger;
use {Vendor}\{Module}\Logger\{Loggername};
use Magento\Framework\Logger\Handler\Base;
class {HandlerName} extends Base
{
protected int $loggerType = {Loggername}::{CUSTOM_LOG_NAME};
protected string $fileName = '/var/log/{fileName}.log';
}
Tipos de Logs
Constantes | Severidade | Descrição |
---|---|---|
DEBUG | 100 | Detalhes de informações do no processo de debug. |
INFO | 200 | informação de eventos. |
NOTICE | 250 | Eventos incomuns. |
WARNING | 300 | Evento que ocorrem como excessões, mas não são erros (depreciações, avisos, etc). |
ERROR | 400 | Erros em tempo de execução. |
CRITICAL | 500 | Condições críticas. |
ALERT | 550 | Alertas de ações que devem ser tomadas imediatamente. |
EMERGENCY | 600 | Alertas urgentes. |
di.xml
O arquivo di.xml
será definido os tipos de argumentos que será inseridos nas classes criadas. Este tipo de arquivo deve seguir a estruturas de pastas \{Vendor}\{Module}\etc\{area}\di.xml
.
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="{Vendor}\{Module}\Logger\{HandlerName}">
<arguments>
<argument name="filesystem" xsi:type="object">Magento\Framework\Filesystem\Driver\File</argument>
</arguments>
</type>
<type name="{Vendor}\{Module}\Logger\{Loggername}">
<arguments>
<argument name="name" xsi:type="string">{logName}</argument>
<argument name="handlers" xsi:type="array">
<item name="system" xsi:type="object">{Vendor}\{Module}\Logger\{HandlerName}</item>
</argument>
</arguments>
</type>
</config>
Finalização
🔗 Valores entre chaves ({test}
) devem ser alterados na implementação do código.
Habilitando as alterações
Apague os arquivos que são gerados na compilação do Magento e execute o comando PHP para gerar a configuração das injeções de dependência e todas as classes ausentes que precisam ser geradas (proxys, interceptors, etc) e para limpar todos os caches de armazenamento em cache do processos.
rm -rf var/generation/
rm -rf generated/
php bin/magento setup:di:compile
php bin/magento cache:clean
php bin/magento flush
Diretórios e Arquivos
Segue a a lista de diretórios e arquivos que devem ser criados.
- app/
- code/
- {Vendor}/
- {Module}/
- etc/
- {area}/
- di.xml
- module.xml
- Logger/
- {HandlerName}.php
- {Loggername}.php
- registration.php
- composer.json