A common task for a Magento module developer is to log various outputs such as exceptions, errors or general information during the execution of module. While Magento 2’s Message manager does a good job of showing nicely formatted messages to user but at times, it is not appropriate. For example; when module is running a long process and you need to record a warning or non-critical exception without halting the process or when you need to output large amount of information.
The best way for this situation is to output these to a log file. Magento itself provides system.log file to save normal logs. However, it really helps to create a custom log file which is specific to the module. If there are some issues or errors you can quickly check in a single file without going through Magento’s default logs. It comes really handy during the development.
Let’s see how we can achieve this. We are going to follow these steps:
Create a custom class that will handle logging.
Create a handler. It will take care of log file and will be used in logger class.
Magento 2 uses Monolog for logging purposes. So we will extend this class into our class. Create following file:
Vendor_Name/Module_Name/Logger/MyLogger.php and put following code in this file.
As you can see we have used a Handler class in the constructor, which we will create next.
Create following file:
Vendor_Name/Module_Name/Logger/Handler.php and put following code in this file.
We are all done now. We can use MonoLog\Logger methods for logging, for a comprehensive list of these methods please refer to :
We just need to obtain the object of Vendor_Name\Vendor_Name\Logger\MyLogger class through constructor dependency injection in any class where we need to log.
That being said, one should use this method with great prejudice as we might end up cluttering up user’s store. A better approach would be to provide user with a backend configuration to enable logs when required so that they can create and send a debug log only when they are facing an issue.
That’s all folks! See you next time. :)