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