/ #magento 

Magento2: Як писати логи модуля в окремий файл?

Щоб писати логи модуля в окремий файл треба виконати наступні кроки:

  1. Сворюємо класи Logger.php та Hadler.php

    <?php
    
    namespace VendorName\ModuleName\Model\Logger;
    
    class Logger extends \Monolog\Logger
    {
    
    }
    
    <?php
    
    namespace VendorName\ModuleName\Model\Logger;
    
    use Monolog\Logger;
    
    class Handler extends \Magento\Framework\Logger\Handler\Base 
    {
        protected $loggerType = Logger::INFO;
        protected $fileName = '/var/log/mymodule.log';
    }
    
  2. Додаємо власний логер до конфігурації в di.xml

    <?xml version="1.0"?>
    <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
        <type name="VendorName\ModuleName\Model\Logger\Handler">
            <arguments>
                <argument name="filesystem" xsi:type="object">Magento\Framework\Filesystem\Driver\File</argument>
            </arguments>
        </type>
        <type name="VendorName\ModuleName\Model\Logger\Logger">
            <arguments>
                <argument name="name" xsi:type="string">MyLogger</argument>
                <argument name="handlers"  xsi:type="array">
                    <item name="system" xsi:type="object">VendorName\ModuleName\Model\Logger\Handler</item>
                </argument>
            </arguments>
        </type>    
    </config>
    
  3. Тепер можемо використати логер, наприклад так

    <?php
    
    namespace VendorName\ModuleName\Controller\Index;
    
    class Test extends \Magento\Framework\App\Action\Action
    {
        ...
        protected $logger;
    
        public function __construct(
            ...
            \VendorName\ModuleName\Model\Logger\Logger $logger    
        ) {
            ...
            $this->logger = $logger;
        }
    
        public function execute()
        {
    
            ...
            $this->logger->info('my message');
            ...
    
        }
    }
    
Author

Олександр Бобилєв

Залишаю собі право використовувати ненормативну (але інформативну) лексику там, де звичайні слова втрачають сенс і не відображають всієї палітри почуттів, від споглядання навколишньої дійсності.