Dans Magento 1, il était courant de segmenter les journaux en différents fichiers (pour séparer les journaux des méthodes de paiement, etc.). C'est aussi simple que de changer le $file
paramètre de Mage::log
.
Magento 2 a changé pour utiliser Monolog.
Il semble que Monolog (ou son implémentation dans Magento2) segmente tous les journaux de la structure entière pour les gestionnaires par gravité. Il y a quelques gestionnaires qui écrivent dans un fichier:
\Magento\Framework\Logger\Handler\Debug
, \Magento\Framework\Logger\Handler\Exception
,\Magento\Framework\Logger\Handler\System
Se connecter aux fichiers respectifs dans var / log comme dans Magento 1.
Je pourrais ajouter un gestionnaire pour une gravité particulière (IE, écrire des avis à var/log/notice.log
). Étendre \Magento\Framework\Logger\Handler\Base
et enregistrer le gestionnaire dans di.xml
.
Cet article décrit approximativement ce processus: http://semaphoresoftware.kinja.com/how-to-create-a-custom-log-in-magento-2-1704130912
Mais comment puis-je écrire tous les journaux (pas seulement une gravité) pour une classe (pas tous Magento) dans le fichier de mon choix?
On dirait que je vais devoir créer ma propre version de Magento\Framework\Logger\Monolog
, mais alors comment tout va-t-il pour que cela fonctionne réellement?
Si c'est un gros non-non dans Magento 2, alors quelle est l'alternative? Je veux quelque chose pour séparer les journaux de cette extension dans le but de la déboguer lorsque cela est nécessaire sur les sites clients. Avoir ces informations écrites dans system.log, exception.log, etc. et enchevêtrées avec les journaux de tous les autres modules n'est pas pratique.
Nous pouvons enregistrer des données dans un fichier comme celui-ci.
la source
La manière la plus simple possible:
la source
Outre les réponses de Halk et de Pradeep Kumar: Si votre seul souci est de vous connecter à un autre fichier, il existe un moyen légèrement plus simple. Surtout si vous souhaitez incorporer cela à plusieurs modules ou si vous voulez différents fichiers journaux au sein de votre module. Avec cette méthode, vous n'avez pas à créer de gestionnaires personnalisés.
En supposant que votre module soit inséré
MyNamespace/MyModule
et que la classe que vous souhaitez consigner dans un fichier personnalisé soit appeléeMyClass
. Si le constructeur de la classe injecte déjà,\Psr\Log\LoggerInterface
passez à l’étape 2). Sinon, vous devez l'injecter dans le constructeur:1) Injectez LoggerInterface dans votre classe
MyClass.php
:Si vous étendez une classe qui inclut déjà un enregistreur (comme
\Magento\Framework\App\Helper\AbstractHelper
), vous pouvez également écraser ce membre (généralement$_logger
) au lieu d’en utiliser un autre. Ajoutez simplement$this->_logger = $logger
après la directive constructeur du parent.2) Configurez l'enregistreur via l'injection de dépendance
etc/di.xml
:Cela connectera tout à
/var/log/mymodule.log
.Si vous devez vous connecter à un fichier différent pour une classe différente, vous pouvez simplement créer un autre enregistreur virtuel avec un autre gestionnaire virtuel et l'injecter dans cette classe.
la source
Si vous en avez besoin dans votre classe unique uniquement:
la source
Essayez le module " praxigento / mage2_ext_logging ". Ce module ajoute la prise en charge "Monolog Cascade" à Magento 2. "Monolog Cascade" vous permet de configurer la sortie de votre journal avec un fichier de configuration unique. Vous pouvez imprimer vos journaux dans différents fichiers, bases de données, envoyer des alertes par courrier électronique, etc. sans modifier votre propre code.
Voici un exemple du fichier de configuration ('var / log / logging.yaml' par défaut):
la source
S'il n'y a pas de changement de logique et qu'il suffit de modifier un nom de fichier de journal personnalisé, il n'est pas nécessaire de créer une classe de journalisation personnalisée, il suffit simplement de suivre les étapes ci-dessous.
1. en di.xml
2. Gestionnaire
où que vous ayez eu besoin de vous connecter les données dont vous avez besoin pour appeler le journal PSR par défaut
qui est
Ainsi, l'exemple ci-dessus enregistrera toutes les données de débogage dans test.log si vous aviez besoin de changer de système, vous pouvez également ajouter la ligne ci-dessous dans di.xml
la source
J'ai essayé ceci ci-dessous le code d'objet d'enregistreur dans un module tiers où je veux obtenir les informations de journal là-bas que j'ai placées et les obtenir dans un fichier custom.log, vérifiez ce code, vous obtenez certainement les journaux dans votre fichier de journal personnalisé.
Si vous aviez besoin de plus d'informations, commentez ici, je vous répondrai. Je vous remercie.
la source