Lors de la phase de développement sous magento 2, les dossiers contenants les fichiers de logs et de reports ont tendance à augmenter rapidement et il devient difficile de s’y retrouver.
Il est possible de supprimer facilement le contenu des ces dossiers via l’explorateur de fichier ou via des commandes shell, mais cela peut être rébarbatif ou source d’erreurs ( rm -rf sur un mauvais dossier entre autre … )

Pour simplifier ces actions nous allons donc créer 2 nouvelles commandes dans la console Magento.
Ceci nous permets de constater qu’ajouter des commandes consoles sur magento 2 c’est très simple 🙂

Le module s’appellera Hhennes_Tools et sera situé dans app/code/Hhennes/Tools/

Pour initialiser le module créer le fichier etc/module.xml avec le contenu suivant

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Hhennes_Tools" setup_version="0.1.0">
    </module>
</config>

Et le fichier de registration registration.php avec le contenu suivant :

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Hhennes_Tools',
    __DIR__
);

Dans le fichier Hhennes/Tools/etc/di.xml ajoutez le contenu suivant :

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Framework\Console\CommandList">
        <arguments>
            <argument name="commands" xsi:type="array">
                <item name="hhennes_tools_cleanreports" xsi:type="object">Hhennes\Tools\Console\Command\CleanReportsCommand</item>
                <item name="hhennes_tools_cleanlogs" xsi:type="object">Hhennes\Tools\Console\Command\CleanLogsCommand</item>
            </argument>
        </arguments>
    </type>
</config>

La logique d’ajout des commandes est situé dans ce fichier, nous ajoutons nos commandes à la liste des commandes disponible lors de l’initialisation de la classe Magento\Framework\Console\CommandList

Il ne reste plus qu’a créer les fichiers php des commandes :
Hhennes/Tools/Console/Command/CleanLogsCommand.php

<?php
 
namespace Hhennes\Tools\Console\Command;
 
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Magento\Framework\App\Filesystem\DirectoryList;
 
class CleanLogsCommand extends Command
{
 
    /** @var DirectoryList  */
    protected $_directoryList;
 
    /**
     * CleanLogsCommand constructor.
     * @param DirectoryList $directoryList
     */
    public function __construct(DirectoryList $directoryList)
    {
        $this->_directoryList = $directoryList;
        parent::__construct();
    }
 
    public function configure()
    {
        $this->setName('dev:clean:logs')
            ->setDescription('clean logs directory');
    }
 
    /**
     * @param InputInterface $inputInterface
     * @param OutputInterface $outputInterface
     * @return bool
     */
    public function execute(InputInterface $inputInterface, OutputInterface $outputInterface)
    {
 
        if (!function_exists('exec')) {
            $outputInterface->writeln('<error>exec command should be available in order to clean log directory</error>');
        } else {
            $reportDir = $this->_directoryList->getPath(DirectoryList::VAR_DIR) . DIRECTORY_SEPARATOR . 'log';
            if (is_dir($reportDir)) {
                //Suppression du contenu du dossier des logs
                exec('rm -rf ' . $reportDir . '/*');
                $outputInterface->writeln('<info>log directory clean with success</info>');
            } else {
                $outputInterface->writeln('<error>log directory does not exists</error>');
            }
        }
        return true;
    }
 
}

Hhennes/Tools/Console/Command/CleanReportsCommand.php

<?php
 
namespace Hhennes\Tools\Console\Command;
 
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Magento\Framework\App\Filesystem\DirectoryList;
 
class CleanReportsCommand extends Command
{
 
    /** @var DirectoryList  */
    protected $_directoryList;
 
    /**
     * CleanReportsCommand constructor.
     * @param DirectoryList $directoryList
     */
    public function __construct(DirectoryList $directoryList)
    {
        $this->_directoryList = $directoryList;
        parent::__construct();
    }
 
    public function configure()
    {
        $this->setName('dev:clean:reports')
            ->setDescription('clean reports directory');
    }
 
    /**
     * @param InputInterface $inputInterface
     * @param OutputInterface $outputInterface
     * @return bool
     */
    public function execute(InputInterface $inputInterface, OutputInterface $outputInterface)
    {
 
        if (!function_exists('exec')) {
            $outputInterface->writeln('<error>exec command should be available in order to clean report directory</error>');
        } else {
            $reportDir = $this->_directoryList->getPath(DirectoryList::VAR_DIR) . DIRECTORY_SEPARATOR . 'report';
            if (is_dir($reportDir)) {
                //Suppression du contenu des reports
                exec('rm -rf ' . $reportDir . '/*');
                $outputInterface->writeln('<info>report directory clean with success</info>');
            } else {
                $outputInterface->writeln('<error>report directory does not exists</error>');
            }
        }
        return true;
    }
 
}

Puis d’ installer le module via la commande :

php bin/magento module:enable Hhennes_Tools

Puis de lancer les updates :

php bin/magento setup:upgrade

 

Relancer la console et les nouvelles commandes sont disponibles 🙂

Magento 2 commands
Pour toutes les syntaxes n’hésitez pas à consulter la documentation de la console symfony, car c’est elle que Magento utilise 😉