Scrivi in un file di registro personalizzato
Il Magento\Framework\Logger
Il modulo contiene le seguenti classi di gestori:
/var/log/debug.log
/var/log/exception.log
/var/log/system.log
È possibile trovarli nel lib/internal/Magento/Framework/Logger/Handler
directory.
Per l'accesso a un file personalizzato è possibile utilizzare uno dei seguenti approcci:
- Configurare un file di registro personalizzato in
di.xml
- Configurare un file personalizzato nella classe del gestore di logger personalizzato
Configurare un file di registro personalizzato in di.xml
Questo esempio mostra come utilizzare tipi virtuali per registrare debug
messaggi in un file di registro personalizzato anziché standard /var/log/debug.log
.
-
In
di.xml
del modulo, definire un file di registro personalizzato come tipo virtuale.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>
Il
name
valore diMagento\Payment\Model\Method\MyCustomDebug
deve essere univoco. -
Definisci il gestore in un altro tipo virtuale con un
name
: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>
-
Inietti il
MyCustomLogger
tipo virtuale nelMagento\Payment\Model\Method\Logger
oggetto: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 classe virtuale
Magento\Payment\Model\Method\MyCustomDebug
viene iniettato neldebug
handler del$logger
proprietà inMagento\Payment\Model\Method\Logger
classe.code language-xml ... <argument name="handlers" xsi:type="array"> <item name="debug" xsi:type="object">Magento\Payment\Model\Method\MyCustomDebug</item> </argument>
I messaggi di eccezione vengono registrati in /var/log/payment.log
file.
Configurare un file di registro personalizzato nella classe del gestore logger
Questo esempio mostra come utilizzare una classe gestore logger personalizzata per registrare error
messaggi in un file di registro specifico.
-
Crea una classe che registra i dati. In questo esempio, la classe è definita in
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'; }
-
Definisci il gestore per questa classe come tipo virtuale nel file del modulo
di.xml
file.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
è un identificatore univoco. -
In
type
specifica il nome della classe in cui viene inserito il gestore di logger personalizzato. Utilizzare il nome del tipo virtuale del passaggio precedente come argomento per questo tipo.code language-xml <type name="Vendor\ModuleName\Observer\MyObserver"> <arguments> <argument name="logger" xsi:type="object">MyCustomLogger</argument> </arguments> </type>
Codice sorgente di
Vendor\ModuleName\Observer\MyObserver
classe: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 classe
Vendor\ModuleName\Logger\Handler\ErrorHandler
viene iniettato nelerror
handler del$logger
proprietà inVendor\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> ...
I messaggi di eccezione vengono registrati in /var/log/my_custom_logger/error.log
file.