/ #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

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

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