W Magento 1 logi były dzielone na różne pliki (w celu oddzielenia dzienników dla metod płatności itp.). To tak proste, jak zmiana $file
parametru Mage::log
.
Magento 2 zmieniło się na Monolog.
Wygląda na to, że Monolog (lub implementacja Magento2) segmentuje wszystkie logi dla całego frameworka na procedury obsługi według ważności. Istnieje kilka programów obsługi, które zapisują do pliku:
\Magento\Framework\Logger\Handler\Debug
, \Magento\Framework\Logger\Handler\Exception
,\Magento\Framework\Logger\Handler\System
Logowanie do odpowiednich plików w var / log jak w Magento 1.
Mógłbym dodać moduł obsługi dla określonego poziomu ważności (IE, pisz powiadomienia do var/log/notice.log
). Rozszerz \Magento\Framework\Logger\Handler\Base
i zarejestruj program obsługi w di.xml
.
W tym artykule z grubsza opisano ten proces: http://semaphoresoftware.kinja.com/how-to-create-a-custom-log-in-magento-2-1704130912
Ale jak przejść do zapisywania wszystkich dzienników (nie tylko jednego poziomu ważności) dla jednej klasy (nie wszystkich Magento) w wybranym pliku?
Wygląda na to, że będę musiał stworzyć własną wersję Magento\Framework\Logger\Monolog
, ale w jaki sposób wszystko do siebie pasuje, aby to rzeczywiście działało?
Jeśli jest to duże nie-nie w Magento 2, to jaka jest alternatywa? Chcę coś, aby oddzielić dzienniki dla tego rozszerzenia w celu debugowania go w razie potrzeby na stronach klienckich. Zapisanie tych informacji w pliku system.log, wyjątku.log itp. I pomieszanie ich z dziennikami każdego innego modułu nie jest praktyczne.
Możemy rejestrować dane w takim pliku.
źródło
Najprostszy możliwy sposób:
źródło
Oprócz odpowiedzi Halk i Pradeep Kumar: Jeśli rzeczywiście jedyną troską jest zalogowanie się do innego pliku, istnieje nieco łatwiejszy sposób. Zwłaszcza jeśli chcesz włączyć to do wielu modułów lub jeśli chcesz mieć różne pliki dziennika w swoim module. Dzięki tej metodzie nie musisz tworzyć własnych programów obsługi.
Zakładając, że moduł jest włączony
MyNamespace/MyModule
i wywoływana jest klasa, którą chcesz zalogować do pliku niestandardowegoMyClass
. Jeśli konstruktor klasy już wstrzykuje,\Psr\Log\LoggerInterface
przejdź do kroku 2). W przeciwnym razie musisz wstrzyknąć go do konstruktora:1) Inject LoggerInterface w twojej klasie
MyClass.php
:Jeśli rozszerzysz klasę, która już zawiera program rejestrujący (podobny
\Magento\Framework\App\Helper\AbstractHelper
), możesz równie dobrze zastąpić tego członka (zwykle$_logger
) zamiast używać osobnego. Po prostu dodaj$this->_logger = $logger
po dyrektywie konstruktora nadrzędnego.2) Skonfiguruj rejestrator za pomocą wstrzykiwania zależności
etc/di.xml
:Spowoduje to zalogowanie wszystkiego do
/var/log/mymodule.log
.Jeśli musisz zalogować się do innego pliku dla innej klasy, możesz po prostu utworzyć inny wirtualny rejestrator za pomocą innego wirtualnego programu obsługi i wstrzyknąć go do tej klasy.
źródło
Jeśli potrzebujesz go tylko w ramach jednej klasy:
źródło
Wypróbuj moduł „ praxigento / mage2_ext_logging ”. Moduł dodaje obsługę „Monolog Cascade” do Magento 2. „Monolog Cascade” pozwala na konfigurację logowania danych wyjściowych za pomocą pojedynczego pliku konfiguracyjnego. Możesz wydrukować dzienniki do różnych plików, baz danych, wysyłać powiadomienia e-mail itp. Bez modyfikacji własnego kodu.
To jest przykład pliku konfiguracyjnego (domyślnie „var / log / logging.yaml”):
źródło
Jeśli nie ma zmiany logiki i wystarczy zmienić niestandardową nazwę pliku dziennika, nie trzeba tworzyć niestandardowej klasy rejestratora, wystarczy wykonać poniższe kroki
1. w di.xml
2. Handler
gdziekolwiek trzeba było rejestrować dane, należy wywołać domyślny dziennik PSR
, czyli
więc powyższy przykład zarejestruje wszystkie dane debugowania do test.log, jeśli trzeba zmienić system, można dodać poniższy wiersz w di.xml
źródło
Próbowałem tego poniżej kodu obiektu rejestratora w module innej firmy, w którym chcę uzyskać informacje o dzienniku, które tam umieściłem i umieść je w pliku custom.log, sprawdź ten kod, na pewno dostaniesz dzienniki do niestandardowego pliku dziennika.
Jeśli potrzebujesz więcej informacji, skomentuj tutaj, odpowiem. Dziękuję Ci.
źródło