[Beitragt von Atwix]{class="badge informative" title="Atwix"}

Schreiben in eine benutzerdefinierte Protokolldatei

Das Modul Magento\Framework\Logger enthält die folgenden Handler-Klassen:

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.

  1. 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 von Magento\Payment\Model\Method\MyCustomDebug muss eindeutig sein.

  2. 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>
    
  3. Spritzen Sie den MyCustomLogger virtuellen Typ in das Objekt Magento\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>
    
  4. Die virtuelle Klasse Magento\Payment\Model\Method\MyCustomDebug wird in den debug -Handler der Eigenschaft $logger in der Klasse Magento\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.

  1. 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';
    }
    
  2. 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.

  3. 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());
            }
        }
    }
    
  4. Die Klasse Vendor\ModuleName\Logger\Handler\ErrorHandler wird in den error -Handler der Eigenschaft $logger im Vendor\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.

recommendation-more-help
386822bd-e32c-40a8-81c2-ed90ad1e198c