[Gentileza de Atwix]{class="badge informative" title="Atwix"} [Solo PaaS]{class="badge informative" title="Se aplica solo a proyectos de Adobe Commerce en la nube (infraestructura PaaS administrada por Adobe) y a proyectos locales."}
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.logPuede 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.xmlde 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
namedeMagento\Payment\Model\Method\MyCustomDebugdebe 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
MyCustomLoggertipo 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\MyCustomDebugse inserta en el controladordebugde la propiedad$loggeren 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.xmldel 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>MyCustomLoggeres 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\ErrorHandlerse inserta en el controladorerrorde la propiedad$loggerenVendor\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.