[Gentileza de Atwix]{class="badge informative" title="Atwix"}
Escribir en un archivo de registro personalizado
El módulo Magento\Framework\Logger
contiene las siguientes clases de controladores:
/var/log/debug.log
/var/log/exception.log
/var/log/system.log
Puede encontrarlos en el directorio lib/internal/Magento/Framework/Logger/Handler
.
Puede utilizar uno de los siguientes métodos para iniciar sesión en un archivo personalizado:
- Configurar un archivo de registro personalizado en
di.xml
- Configurar un archivo personalizado en la clase de controlador de registrador personalizado
Configurar un archivo de registro personalizado en di.xml
Este ejemplo muestra cómo usar tipos virtuales para registrar debug
mensajes en un archivo de registro personalizado en lugar de un /var/log/debug.log
estándar.
-
En el archivo
di.xml
de su módulo, defina un archivo de registro personalizado como 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>
El valor
name
deMagento\Payment\Model\Method\MyCustomDebug
debe ser único. -
Defina el controlador en otro tipo virtual con un
name
único: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>
-
Inyecte el
MyCustomLogger
tipo virtual en el 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>
-
La clase virtual
Magento\Payment\Model\Method\MyCustomDebug
se inserta en el controladordebug
de la propiedad$logger
en la claseMagento\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>
Los mensajes de excepción se han registrado en el archivo /var/log/payment.log
.
Configurar un archivo de registro personalizado en la clase de controlador del registrador
Este ejemplo muestra cómo utilizar una clase de controlador de registrador personalizada para registrar error
mensajes en un archivo de registro específico.
-
Cree una clase que registre datos. En este ejemplo, la clase se define en
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 el controlador para esta clase como un tipo virtual en el archivo
di.xml
del 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
es un identificador único. -
En la definición
type
, especifique el nombre de clase donde se inserta el controlador de registrador personalizado. Utilice el nombre de tipo virtual del paso anterior como argumento para este tipo.code language-xml <type name="Vendor\ModuleName\Observer\MyObserver"> <arguments> <argument name="logger" xsi:type="object">MyCustomLogger</argument> </arguments> </type>
Código Source de la clase
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()); } } }
-
La clase
Vendor\ModuleName\Logger\Handler\ErrorHandler
se inserta en el controladorerror
de la propiedad$logger
enVendor\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> ...
Los mensajes de excepción se registran en el archivo /var/log/my_custom_logger/error.log
.