[Contribuição de Atwix]{class="badge informative" title="Atwix"} [Somente PaaS]{class="badge informative" title="Aplica-se somente a projetos do Adobe Commerce na nuvem (infraestrutura do PaaS gerenciada pela Adobe) e a projetos locais."}
Gravar em um arquivo de log personalizado
O módulo Magento\Framework\Logger contém as seguintes classes de manipulador:
/var/log/debug.log/var/log/exception.log/var/log/system.logVocê pode encontrá-los no diretório lib/internal/Magento/Framework/Logger/Handler.
Você pode usar uma das seguintes abordagens para fazer logon em um arquivo personalizado:
- Configurar um arquivo de log personalizado no
di.xml - Configurar um arquivo personalizado na classe de manipulador de log personalizado
Configurar um arquivo de log personalizado no di.xml
Este exemplo mostra como usar tipos virtuais para registrar mensagens debug em um arquivo de log personalizado em vez de um /var/log/debug.log padrão.
-
No arquivo
di.xmldo módulo, defina um arquivo de log personalizado como um tipo virtual.code language-xml <virtualType name="Magento\Payment\Model\Method\MyCustomDebug" type="Magento\Framework\Logger\Handler\Base"> <arguments> <argument name="fileName" xsi:type="string">/var/log/payment.log</argument> </arguments> </virtualType>O valor
namedeMagento\Payment\Model\Method\MyCustomDebugdeve ser exclusivo. -
Defina o manipulador em outro tipo virtual com um
nameexclusivo:code language-xml <virtualType name="Magento\Payment\Model\Method\MyCustomLogger" type="Magento\Framework\Logger\Monolog"> <arguments> <argument name="handlers" xsi:type="array"> <item name="debug" xsi:type="object">Magento\Payment\Model\Method\MyCustomDebug</item> </argument> </arguments> </virtualType> -
Insira o
MyCustomLoggertipo virtual no objetoMagento\Payment\Model\Method\Logger:code language-xml <type name="Magento\Payment\Model\Method\Logger"> <arguments> <argument name="logger" xsi:type="object">Magento\Payment\Model\Method\MyCustomLogger</argument> </arguments> </type> -
A classe virtual
Magento\Payment\Model\Method\MyCustomDebugestá inserida no manipuladordebugda propriedade$loggerna classeMagento\Payment\Model\Method\Logger.code language-xml ... <argument name="handlers" xsi:type="array"> <item name="debug" xsi:type="object">Magento\Payment\Model\Method\MyCustomDebug</item> </argument>
Mensagens de exceção são registradas no arquivo /var/log/payment.log.
Configurar um arquivo de log personalizado na classe de manipulador de log
Este exemplo mostra como usar uma classe de manipulador de agente de log personalizado para registrar mensagens error em um arquivo de log específico.
-
Crie uma classe que registre dados. Neste exemplo, a classe é definida em
app/code/Vendor/ModuleName/Logger/Handler/ErrorHandler.php.code language-php <?php /** * @author Vendor * @copyright Copyright (c) 2019 Vendor (https://www.vendor.com/) */ namespace Vendor\ModuleName\Logger\Handler; use Magento\Framework\Logger\Handler\Base as BaseHandler; use Monolog\Logger as MonologLogger; /** * Class ErrorHandler */ class ErrorHandler extends BaseHandler { /** * Logging level * * @var int */ protected $loggerType = MonologLogger::ERROR; /** * File name * * @var string */ protected $fileName = '/var/log/my_custom_logger/error.log'; } -
Defina o manipulador para esta classe como um tipo virtual no arquivo
di.xmldo módulo.code language-xml <virtualType name="MyCustomLogger" type="Magento\Framework\Logger\Monolog"> <arguments> <argument name="handlers" xsi:type="array"> <item name="error" xsi:type="object">Vendor\ModuleName\Logger\Handler\ErrorHandler</item> </argument> </arguments> </virtualType>MyCustomLoggeré um identificador exclusivo. -
Na definição
type, especifique o nome da classe em que o manipulador de log personalizado está inserido. Use o nome do tipo virtual da etapa anterior como argumento para esse tipo.code language-xml <type name="Vendor\ModuleName\Observer\MyObserver"> <arguments> <argument name="logger" xsi:type="object">MyCustomLogger</argument> </arguments> </type>Código Source da classe
Vendor\ModuleName\Observer\MyObserver:code language-php <?php /** * @author Vendor * @copyright Copyright (c) 2019 Vendor (https://www.vendor.com/) */ declare(strict_types=1); namespace Vendor\ModuleName\Observer; use Psr\Log\LoggerInterface as PsrLoggerInterface; use Exception; use Magento\Framework\Event\ObserverInterface; use Magento\Framework\Event\Observer; /** * Class MyObserver */ class MyObserver implements ObserverInterface { /** * @var PsrLoggerInterface */ private $logger; /** * MyObserver constructor. * * @param PsrLoggerInterface $logger */ public function __construct( PsrLoggerInterface $logger ) { $this->logger = $logger; } /** * @param Observer $observer */ public function execute(Observer $observer) { try { // some code goes here } catch (Exception $e) { $this->logger->error($e->getMessage()); } } } -
A classe
Vendor\ModuleName\Logger\Handler\ErrorHandleré inserida no manipuladorerrorda propriedade$loggeremVendor\ModuleName\Observer\MyObserver.code language-xml ... <argument name="handlers" xsi:type="array"> <item name="error" xsi:type="object">Vendor\ModuleName\Logger\Handler\ErrorHandler</item> </argument> ...
Mensagens de exceção registradas no arquivo /var/log/my_custom_logger/error.log.