Custom Log File in Magento 2
Magento provides multiple types of logs by default (info, notice, warning, critical etc)
Recently I had to use custom log files for a custom module that I implemented.
I will try to explain here the multiple approaches to do that,
a) Set a custom file in your module’s di.xml file
In the di.xml file of your module, define a custom log file as a virtual type.
<!-- Custom Logger -->
<!-- start -->
<virtualType name="DW\Interface\OrderManagement\Handler" type="Magento\Framework\Logger\Handler\Base">
<arguments>
<argument name="filesystem" xsi:type="object">Magento\Framework\Filesystem\Driver\File</argument>
<argument name="fileName" xsi:type="string">/var/log/dw/order.log</argument>
</arguments>
</virtualType>
<virtualType name="DW\Interface\OrderManagement\Logger" type="Magento\Framework\Logger\Monolog">
<arguments>
<argument name="name" xsi:type="string">orderUpdateLog</argument>
<argument name="handlers" xsi:type="array">
<item name="system" xsi:type="object">DW\Interface\OrderManagement\Handler</item>
</argument>
</arguments>
</virtualType>
<type name="DW\Interface\Model\OrderManagement">
<arguments>
<argument name="orderLogger" xsi:type="object">DW\Interface\OrderManagement\Logger</argument>
</arguments>
</type>
<!-- ends here -->
b) Set up a custom file in the custom logger handler class
1) Create a class that logs data. In this example, the class is defined in
DW\Interface\Logger\Order\Handler.php
<?php
/**
* @author DW
* @copyright Copyright (c) 2019 Vendor (https://www.decryptweb.com/)
*/
namespace DW\Interface\Logger\Order;
use Magento\Framework\Logger\Handler\Base;
use Monolog\Logger;
/**
* Class Handler
* @package DW\Interface\Logger\Order
*/
class Handler extends Base
{
/**
* @var string
*/
protected $loggerType = Logger::INFO;
/**
* File name
* @var string
*/
protected $fileName = '/var/log/dw/order.log';
}//end class
2) Create a class that extends monologger. In this example, the class is defined in
DW\Interface\Logger\Order\Logger.php
<?php
/**
* @author DW
* @copyright Copyright (c) 2019 Vendor (https://www.decryptweb.com/)
*/
namespace DW\Interface\Logger\Order;
use Monolog\Logger as MonologLogger;
/**
* Class Logger
*/
class Logger extends MonologLogger
{
}
3) Define the handler and logger for these classes in the module’s di.xml file.
<!-- Order Update Logger -->
<type name="DW\Interface\Logger\Order\Handler">
<arguments>
<argument name="filesystem" xsi:type="object">Magento\Framework\Filesystem\Driver\File</argument>
</arguments>
</type>
<type name="DW\Interface\Logger\Order\Logger">
<arguments>
<argument name="name" xsi:type="string">OrderUpdateLogHandler</argument>
<argument name="handlers" xsi:type="array">
<item name="system" xsi:type="object">DW\Interface\Logger\Order\Handler</item>
</argument>
</arguments>
</type>
<!-- Order Update End -->
Hope this is helpful
