В Magento 1 было обычным делить журналы на разные файлы (разделять журналы для способов оплаты и т. Д.). Это так же просто, как изменить $file
параметр Mage::log
.
Magento 2 изменился, чтобы использовать Monolog.
Похоже, что Monolog (или его реализация в Magento2) сегментирует все журналы для всей среды по серьезности. Есть несколько обработчиков, которые пишут в файл:
\Magento\Framework\Logger\Handler\Debug
, \Magento\Framework\Logger\Handler\Exception
,\Magento\Framework\Logger\Handler\System
Вход в соответствующие файлы в var / log как в Magento 1.
Я мог бы добавить обработчик для конкретной серьезности (например, писать уведомления для var/log/notice.log
). Расширьте \Magento\Framework\Logger\Handler\Base
и зарегистрируйте обработчик в di.xml
.
Эта статья приблизительно описывает этот процесс: http://semaphoresoftware.kinja.com/how-to-create-a-custom-log-in-magento-2-1704130912
Но как мне записать все журналы (не только одну серьезность) для одного класса (не все Magento) в мой файл выбора?
Похоже, мне придется создать свою собственную версию Magento\Framework\Logger\Monolog
, но как же тогда все совместится, чтобы это на самом деле работало?
Если это большое нет-нет в Magento 2, то какова альтернатива? Я хочу что-то отделить журналы для этого расширения с целью отладки его при необходимости на клиентских сайтах. Записывать эту информацию в system.log, exception.log и т. Д. И перемешивать с журналами всех остальных модулей нецелесообразно.
Мы можем записать данные в файл, как это.
источник
Самый простой способ:
источник
В дополнение к ответам Халка и Прадипа Кумара: Если действительно ваша единственная задача - войти в другой файл, есть несколько более простой способ. Особенно, если вы хотите включить это в несколько модулей или если вы хотите, чтобы различные файлы журнала в вашем модуле. С этим методом вам не нужно создавать собственные обработчики.
Предполагая, что ваш модуль включен,
MyNamespace/MyModule
и класс, который вы хотите записать в пользовательский файл, вызываетсяMyClass
. Если конструктор класса уже внедряет,\Psr\Log\LoggerInterface
перейдите к шагу 2). В противном случае вам нужно добавить его в конструктор:1) Вставьте LoggerInterface в свой класс
MyClass.php
:Если вы расширяете класс, который уже включает в себя регистратор (например
\Magento\Framework\App\Helper\AbstractHelper
), вы можете также перезаписать этот элемент (обычно$_logger
) вместо использования отдельного. Просто добавьте$this->_logger = $logger
после директивы родительского конструктора.2) Настройте регистратор через внедрение зависимостей
etc/di.xml
:Это будет регистрировать все, чтобы
/var/log/mymodule.log
.Если вам нужно войти в другой файл для другого класса, вы можете просто создать другой виртуальный регистратор с другим виртуальным обработчиком и вставить его в этот класс.
источник
Если вам это нужно только в одном классе:
источник
Попробуйте модуль " praxigento / mage2_ext_logging ". В этом модуле добавлена поддержка «Monolog Cascade» в Magento 2. «Monolog Cascade» позволяет вам сконфигурировать выход журналирования с помощью одного файла конфигурации. Вы можете распечатывать свои журналы в различные файлы, базы данных, отправлять уведомления по электронной почте и т. Д. Без изменения собственного кода.
Это пример файла конфигурации (по умолчанию 'var / log / logging.yaml'):
источник
Если логическое изменение отсутствует и нужно только изменить пользовательское имя файла журнала, то не нужно создавать собственный класс логгера, просто следуйте инструкциям ниже
1. в di.xml
2. Обработчик
где когда-либо вам нужно было записать данные, которые вы должны вызвать журнал PSR по умолчанию,
который
так что в приведенном выше примере все отладочные данные будут записываться в test.log, если вам нужно изменить систему, также вы можете добавить строку ниже в di.xml
источник
Я попробовал этот ниже объектный код logger в стороннем модуле, где я хочу получить информацию журнала там, которую я поместил и получить их в файл custom.log, проверить этот код, вы определенно получите журналы в свой пользовательский файл журнала.
Если вам потребуется дополнительная информация, я отвечу. Спасибо.
источник