[Bijgedragen door Atwix]{class="badge informative" title="Atwix"} [Alleen PaaS]{class="badge informative" title="Is alleen van toepassing op Adobe Commerce op Cloud-projecten (door Adobe beheerde PaaS-infrastructuur) en op projecten in het veld."}
Naar een aangepast logbestand schrijven
De module Magento\Framework\Logger bevat de volgende handlerklassen:
/var/log/debug.log/var/log/exception.log/var/log/system.logU vindt ze mogelijk in de map lib/internal/Magento/Framework/Logger/Handler .
U kunt een van de volgende methoden gebruiken om u aan te melden bij een aangepast bestand:
- Een aangepast logbestand instellen in het dialoogvenster
di.xml - Een aangepast bestand instellen in de aangepaste logboekafhandelingsklasse
Een aangepast logbestand instellen in het dialoogvenster di.xml
Dit voorbeeld toont hoe te om virtuele types te gebruiken om debug berichten in een dossier van het douanelogboek in plaats van een norm /var/log/debug.log te registreren.
-
In het
di.xmldossier van uw module, bepaal een dossier van het douanelogboek als a virtueel type .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>De
namewaarde vanMagento\Payment\Model\Method\MyCustomDebugmoet uniek zijn. -
Bepaal de manager in een ander virtueel type met een uniek
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> -
Injecteer het
MyCustomLogger virtuele type in hetMagento\Payment\Model\Method\Loggervoorwerp: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> -
De virtuele klasse
Magento\Payment\Model\Method\MyCustomDebugwordt in dedebughandler van de eigenschap$loggerin deMagento\Payment\Model\Method\Logger-klasse geïnjecteerd.code language-xml ... <argument name="handlers" xsi:type="array"> <item name="debug" xsi:type="object">Magento\Payment\Model\Method\MyCustomDebug</item> </argument>
Uitzonderingsberichten worden in het /var/log/payment.log -bestand aangemeld.
Een aangepast logbestand instellen in de klasse Logger
In dit voorbeeld wordt getoond hoe u een aangepaste logboekafhandelingsklasse kunt gebruiken om error -berichten in een specifiek logbestand te registreren.
-
Maak een klasse waarin gegevens worden geregistreerd. In dit voorbeeld wordt de klasse gedefinieerd 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'; } -
Bepaal de manager voor deze klasse als a virtueel type in het 2} dossier van de module {.
di.xmlcode 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>MyCustomLoggeris een unieke id. -
Geef in de definitie
typede klassenaam op waar de aangepaste logboekhandler wordt geïnjecteerd. Gebruik de virtuele typenaam van de vorige stap als argument voor dit type.code language-xml <type name="Vendor\ModuleName\Observer\MyObserver"> <arguments> <argument name="logger" xsi:type="object">MyCustomLogger</argument> </arguments> </type>Source-code van
Vendor\ModuleName\Observer\MyObserver-klasse: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()); } } } -
De klasse
Vendor\ModuleName\Logger\Handler\ErrorHandlerwordt geïnjecteerd in deerrorhandler van de eigenschap$loggerin deVendor\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> ...
Uitzonderingsberichten worden in het /var/log/my_custom_logger/error.log -bestand aangemeld.