Magento2: Як писати логи модуля в окремий файл?
Щоб писати логи модуля в окремий файл треба виконати наступні кроки:
-
Сворюємо класи 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'; }
-
Додаємо власний логер до конфігурації в 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>
-
Тепер можемо використати логер, наприклад так
<?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'); ... } }