[Contributo di Atwix]{class="badge informative" title="Atwix"}
Scrivi in un file di registro personalizzato
Il modulo Magento\Framework\Logger
contiene le seguenti classi di gestori:
/var/log/debug.log
/var/log/exception.log
/var/log/system.log
È possibile trovarli nella directory lib/internal/Magento/Framework/Logger/Handler
.
Per l'accesso a un file personalizzato è possibile utilizzare uno dei seguenti approcci:
- Configura un file di registro personalizzato in
di.xml
- Configurare un file personalizzato nella classe del gestore di logger personalizzato
Configura un file di registro personalizzato in di.xml
In questo esempio viene illustrato come utilizzare tipi virtuali per registrare debug
messaggi in un file di registro personalizzato anziché un /var/log/debug.log
standard.
-
Nel file
di.xml
del modulo, definisci 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 valore
name
diMagento\Payment\Model\Method\MyCustomDebug
deve essere univoco. -
Definisci il gestore in un altro tipo virtuale con un
name
univoco: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>
-
Inserire il
MyCustomLogger
tipo virtuale nell'oggettoMagento\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 classe virtuale
Magento\Payment\Model\Method\MyCustomDebug
viene inserita nel gestoredebug
della proprietà$logger
nella 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>
Messaggi di eccezione registrati nel file /var/log/payment.log
.
Configurare un file di registro personalizzato nella classe del gestore logger
In questo esempio viene illustrato come utilizzare una classe gestore logger personalizzata per registrare error
messaggi in un file di log 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
di.xml
del modulo.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. -
Nella definizione
type
, specificare 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 Source della 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()); } } }
-
La classe
Vendor\ModuleName\Logger\Handler\ErrorHandler
viene inserita nel gestoreerror
della proprietà$logger
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> ...
Messaggi di eccezione registrati nel file /var/log/my_custom_logger/error.log
.