As the Magento core team continue to work Zend out of the application, we’re starting to see legacy libraries being fully dropped – including (annoyingly) the Zend logging class.

Before Magento 2.4.3, you used to be able to log anything in your code like this;

public function logThis($msg) {
		$date   = date("d-m-Y H:i:s");
		$writer = new \Zend\Log\Writer\Stream(BP . '/var/log/pixie-log.log');
		$logger = new \Zend\Log\Logger();
		$logger->info($date.': '.$msg);

Since Magento 2.4.3 you can’t use method of a Zend logger any more.

So how do we log to a custom log file now?

In your custom module, add the following to /etc/di.xml

<?xml version="1.0"?>
 <config xmlns:xsi="" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="PixieMedia\Core\Logger\Handler">
            <argument name="filesystem" xsi:type="object">Magento\Framework\Filesystem\Driver\File</argument>
    <type name="PixieMedia\Core\Logger\Logger">
            <argument name="name" xsi:type="string">pixieLogger</argument>
            <argument name="handlers"  xsi:type="array">
                <item name="system" xsi:type="object">PixieMedia\Core\Logger\Handler</item>

Then in your module, create file /Logger/Handler.php


namespace PixieMedia\Core\Logger;
use Magento\Framework\Logger\Handler\Base;
use Monolog\Logger;
class Handler extends Base
    protected $loggerType = Logger::INFO;
    protected $fileName = '/var/log/pixiemedia_logger.log';

And finally, add /Logger/Logger.php


namespace PixieMedia\Core\Logger;
class Logger extends \Monolog\Logger

And now in any class you want to add logging, simply add this to your constructor;

public function __construct(
\PixieMedia\Core\Logger\Logger $pixieLogger
$this->_pixieLogger = $pixieLogger;

Then you can log like this;

$msg = 'Log this!';

And then your log will appear in [mage root]/var/log/pixie_logger.log

[2021-09-01 12:54:27] pixieLogger.INFO: Log this!

While this does feel more restrictive - for example, not being able to declare the log filename on the fly, it does close a security risk and facilitate log cleaning on your declared log files.

Happy coding!