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

Leave a Reply

Your email address will not be published. Required fields are marked *

Scroll to top