[Contributo di Atwix]{class="badge informative" title="Atwix"} [Solo PaaS]{class="badge informative" title="Applicabile solo ai progetti Adobe Commerce on Cloud (infrastruttura PaaS gestita da Adobe) e ai progetti on-premise."}
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.xmldel 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
namediMagento\Payment\Model\Method\MyCustomDebugdeve essere univoco. -
Definisci il gestore in un altro tipo virtuale con un
nameunivoco: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
MyCustomLoggertipo 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\MyCustomDebugviene inserita nel gestoredebugdella proprietà$loggernella 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.xmldel 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\ErrorHandlerviene inserita nel gestoreerrordella proprietà$loggerinVendor\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.