[Beitragt von Atwix]{class="badge informative" title="Atwix"}
Schreiben in eine benutzerdefinierte Protokolldatei
Das Modul Magento\Framework\Logger
enthält die folgenden Handler-Klassen:
/var/log/debug.log
/var/log/exception.log
/var/log/system.log
Sie können sie im Verzeichnis lib/internal/Magento/Framework/Logger/Handler
finden.
Sie können einen der folgenden Ansätze zum Anmelden 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 anstatt in einer standardmäßigen /var/log/debug.log
zu protokollieren.
-
Definieren Sie in der Datei
di.xml
Ihres 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
name
-Wert vonMagento\Payment\Model\Method\MyCustomDebug
muss eindeutig sein. -
Definieren Sie den Handler in einem anderen virtuellen Typ mit einer 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>
-
Spritzen Sie den
MyCustomLogger
virtuellen Typ in das ObjektMagento\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>
-
Die virtuelle Klasse
Magento\Payment\Model\Method\MyCustomDebug
wird in dendebug
-Handler der Eigenschaft$logger
in der KlasseMagento\Payment\Model\Method\Logger
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 Datei /var/log/payment.log
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.php
definiert.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.xml
-Datei des 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>
MyCustomLogger
ist eine eindeutige Kennung. -
Geben Sie in der Definition
type
den Klassennamen an, in den der benutzerdefinierte Logger-Handler eingefügt wird. 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 der
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()); } } }
-
Die Klasse
Vendor\ModuleName\Logger\Handler\ErrorHandler
wird in denerror
-Handler der Eigenschaft$logger
imVendor\ModuleName\Observer\MyObserver
eingefü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 Datei /var/log/my_custom_logger/error.log
protokolliert.