In Magento 1 war es üblich, Protokolle in verschiedene Dateien zu unterteilen (um Protokolle für Zahlungsmethoden usw. zu trennen). Das ist so einfach wie das Ändern der $file
Parameter von Mage::log
.
Magento 2 wurde geändert, um Monolog zu verwenden.
Es scheint, dass Monolog (oder die Implementierung von Magento2) alle Protokolle für das gesamte Framework nach Schweregrad für die Handler segmentiert. Es gibt einige Handler, die in eine Datei schreiben:
\Magento\Framework\Logger\Handler\Debug
, \Magento\Framework\Logger\Handler\Exception
,\Magento\Framework\Logger\Handler\System
Protokollierung in die entsprechenden Dateien in var / log wie in Magento 1.
Ich könnte einen Handler für einen bestimmten Schweregrad hinzufügen (IE, Schreiben von Hinweisen an var/log/notice.log
). Erweitern Sie \Magento\Framework\Logger\Handler\Base
und registrieren Sie den Handler in di.xml
.
In diesem Artikel wird dieser Vorgang grob beschrieben: http://semaphoresoftware.kinja.com/how-to-create-a-custom-log-in-magento-2-1704130912
Aber wie schreibe ich alle Protokolle (nicht nur einen Schweregrad) für eine Klasse (nicht alle von Magento) in eine Datei meiner Wahl?
Es sieht so aus, als müsste ich meine eigene Version von erstellen Magento\Framework\Logger\Monolog
, aber wie passt dann alles zusammen, damit das tatsächlich funktioniert?
Wenn dies in Magento 2 ein großes Nein ist, was ist dann die Alternative? Ich möchte, dass die Protokolle für diese Erweiterung getrennt werden, um sie bei Bedarf auf Clientsites zu debuggen. Es ist nicht praktikabel, diese Informationen in system.log, exception.log usw. zu schreiben und mit den Protokollen aller anderen Module zu verwechseln.
Wir können Daten in einer solchen Datei protokollieren.
quelle
Der einfachste Weg:
quelle
Zusätzlich zu den Antworten von Halk und Pradeep Kumar: Wenn Sie tatsächlich nur in eine andere Datei einloggen möchten, gibt es einen etwas einfacheren Weg. Insbesondere, wenn Sie dies in mehrere Module integrieren möchten oder wenn Sie unterschiedliche Protokolldateien in Ihrem Modul verwenden möchten. Mit dieser Methode müssen Sie keine benutzerdefinierten Handler erstellen.
Angenommen, Ihr Modul befindet sich in
MyNamespace/MyModule
und die Klasse, die Sie in einer benutzerdefinierten Datei protokollieren möchten, wird aufgerufenMyClass
. Wenn der Konstruktor der Klasse bereits injiziert, fahren Sie\Psr\Log\LoggerInterface
mit Schritt 2 fort. Andernfalls müssen Sie es in den Konstruktor einfügen:1) Injizieren Sie LoggerInterface in Ihre Klasse
MyClass.php
:Wenn Sie eine Klasse erweitern, die bereits einen Logger (wie
\Magento\Framework\App\Helper\AbstractHelper
) enthält, können Sie dieses Mitglied (normalerweise$_logger
) auch überschreiben, anstatt ein separates zu verwenden. Fügen Sie einfach$this->_logger = $logger
nach der übergeordneten Konstruktor-Direktive hinzu.2) Logger über Dependency Injection konfigurieren
etc/di.xml
:Dies wird alles aufzeichnen
/var/log/mymodule.log
.Wenn Sie sich in einer anderen Datei für eine andere Klasse anmelden müssen, können Sie einfach einen anderen virtuellen Logger mit einem anderen virtuellen Handler erstellen und in diese Klasse einfügen.
quelle
Wenn Sie es nur in Ihrer Einzelklasse brauchen:
quelle
Versuchen Sie das Modul " praxigento / mage2_ext_logging ". Dieses Modul erweitert Magento 2 um die "Monolog Cascade" -Unterstützung. Mit "Monolog Cascade" können Sie Ihre Protokollausgabe mit einer einzigen Konfigurationsdatei konfigurieren. Sie können Ihre Protokolle in verschiedenen Dateien, Datenbanken, E-Mail-Benachrichtigungen usw. ausdrucken, ohne den eigenen Code zu ändern.
Dies ist ein Beispiel für die Konfigurationsdatei (standardmäßig 'var / log / logging.yaml'):
quelle
Wenn sich die Logik nicht ändert und nur der Name einer benutzerdefinierten Protokolldatei geändert werden muss, müssen Sie auch keine benutzerdefinierte Protokollklasse erstellen. Befolgen Sie dazu einfach die nachstehenden Schritte
1. in di.xml
2. Handler
Wo immer Sie die Daten protokollieren mussten
, müssen Sie das Standard-PSR-Protokoll aufrufen
Das obige Beispiel protokolliert alle Debug-Daten in test.log, wenn Sie das System ändern müssen. Sie können auch die folgende Zeile in di.xml hinzufügen
quelle
Ich habe den folgenden Logger-Objektcode in einem Drittanbieter-Modul ausprobiert, in dem ich die dort abgelegten Log-Informationen abrufen und in die custom.log-Datei laden möchte. Überprüfen Sie diesen Code. Sie erhalten die Logs definitiv in Ihre benutzerdefinierte Log-Datei.
Wenn Sie weitere Informationen Kommentar hier erforderlich, werde ich antworten. Danke.
quelle