[Von Atwix beigetragen]{class="badge informative" title="ATWIX"} [Nur PaaS]{class="badge informative" title="Gilt nur für Adobe Commerce in Cloud-Projekten (von Adobe verwaltete PaaS-Infrastruktur) und lokale Projekte."}
Schreiben in eine benutzerdefinierte Protokolldatei
Das Magento\Framework\Logger-Modul enthält die folgenden Handler-Klassen:
/var/log/debug.log/var/log/exception.log/var/log/system.logSie finden sie möglicherweise im lib/internal/Magento/Framework/Logger/Handler.
Sie können einen der folgenden Ansätze für die Anmeldung bei einer benutzerdefinierten Datei verwenden:
- Einrichten einer benutzerdefinierten Protokolldatei im
di.xml - Einrichten einer benutzerdefinierten Datei in der benutzerdefinierten Logger-Handler-Klasse
Einrichten einer benutzerdefinierten Protokolldatei im di.xml
In diesem Beispiel wird gezeigt, wie virtuelle Typen verwendet werden, um debug Meldungen in einer benutzerdefinierten Protokolldatei anstelle eines /var/log/debug.log zu protokollieren.
-
Definieren Sie in der
di.xmlIhres Moduls eine benutzerdefinierte Protokolldatei als virtuellen Typ.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>Der
nameWert vonMagento\Payment\Model\Method\MyCustomDebugmuss eindeutig sein. -
Definieren Sie den Handler in einem anderen virtuellen Typ mit einem eindeutigen
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> -
Fügen Sie den
MyCustomLoggervirtuellen Typ in dasMagento\Payment\Model\Method\Loggerein: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> -
Die virtuelle Klasse
Magento\Payment\Model\Method\MyCustomDebugwird in dendebug-Handler der$logger-Eigenschaft in derMagento\Payment\Model\Method\Logger-Klasse eingefügt.code language-xml ... <argument name="handlers" xsi:type="array"> <item name="debug" xsi:type="object">Magento\Payment\Model\Method\MyCustomDebug</item> </argument>
Ausnahmemeldungen werden in der /var/log/payment.log-Datei protokolliert.
Einrichten einer benutzerdefinierten Protokolldatei in der Logger-Handler-Klasse
In diesem Beispiel wird gezeigt, wie mit einer benutzerdefinierten Logger-Handler-Klasse error Meldungen in einer bestimmten Protokolldatei protokolliert werden.
-
Erstellen Sie eine Klasse, die Daten protokolliert. In diesem Beispiel wird die Klasse in
app/code/Vendor/ModuleName/Logger/Handler/ErrorHandler.phpdefiniert.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'; } -
Definieren Sie den Handler für diese Klasse als virtuellen Typ in der
di.xmldes Moduls.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>MyCustomLoggerist eine eindeutige Kennung. -
Geben Sie in der
typeden Klassennamen an, in den der benutzerdefinierte Logger-Handler eingefügt werden soll. Verwenden Sie den Namen des virtuellen Typs aus dem vorherigen Schritt als Argument für diesen Typ.code language-xml <type name="Vendor\ModuleName\Observer\MyObserver"> <arguments> <argument name="logger" xsi:type="object">MyCustomLogger</argument> </arguments> </type>Source-Code
Vendor\ModuleName\Observer\MyObserverKlasse: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()); } } } -
Die Klasse
Vendor\ModuleName\Logger\Handler\ErrorHandlerwird in denerror-Handler der$logger-Eigenschaft in derVendor\ModuleName\Observer\MyObservereingefügt.code language-xml ... <argument name="handlers" xsi:type="array"> <item name="error" xsi:type="object">Vendor\ModuleName\Logger\Handler\ErrorHandler</item> </argument> ...
Ausnahmemeldungen werden in der /var/log/my_custom_logger/error.log-Datei protokolliert.