[由Atwix提供]{class="badge informative" title="阿特维克斯"} [仅限PaaS]{class="badge informative" title="仅适用于云项目(Adobe管理的PaaS基础架构)和内部部署项目上的Adobe Commerce 。"}
写入自定义日志文件
Magento\Framework\Logger模块包含以下处理程序类:
/var/log/debug.log/var/log/exception.log/var/log/system.log您可以在lib/internal/Magento/Framework/Logger/Handler目录中找到它们。
您可以使用以下方法之一登录到自定义文件:
- 在
di.xml中设置自定义日志文件 - 在自定义记录器处理程序类中设置自定义文件
在di.xml中设置自定义日志文件
此示例说明如何使用虚拟类型将debug消息记录到自定义日志文件而不是标准/var/log/debug.log中。
-
在模块的
di.xml文件中,将自定义日志文件定义为虚拟类型。code language-xml <virtualType name="Magento\Payment\Model\Method\MyCustomDebug" type="Magento\Framework\Logger\Handler\Base"> <arguments> <argument name="fileName" xsi:type="string">/var/log/payment.log</argument> </arguments> </virtualType>name的Magento\Payment\Model\Method\MyCustomDebug值必须是唯一的。 -
在另一具有唯一的虚拟类型
name中定义处理程序:code language-xml <virtualType name="Magento\Payment\Model\Method\MyCustomLogger" type="Magento\Framework\Logger\Monolog"> <arguments> <argument name="handlers" xsi:type="array"> <item name="debug" xsi:type="object">Magento\Payment\Model\Method\MyCustomDebug</item> </argument> </arguments> </virtualType> -
在
MyCustomLogger对象中插入 虚拟类型Magento\Payment\Model\Method\Logger:code language-xml <type name="Magento\Payment\Model\Method\Logger"> <arguments> <argument name="logger" xsi:type="object">Magento\Payment\Model\Method\MyCustomLogger</argument> </arguments> </type> -
虚拟类
Magento\Payment\Model\Method\MyCustomDebug被插入到debug类中$logger属性的Magento\Payment\Model\Method\Logger处理程序中。code language-xml ... <argument name="handlers" xsi:type="array"> <item name="debug" xsi:type="object">Magento\Payment\Model\Method\MyCustomDebug</item> </argument>
异常消息记录到/var/log/payment.log文件中。
在记录器处理程序类中设置自定义日志文件
此示例说明如何使用自定义记录器处理程序类将error消息记录到特定日志文件中。
-
创建记录数据的类。 在此示例中,该类在
app/code/Vendor/ModuleName/Logger/Handler/ErrorHandler.php中定义。code language-php <?php /** * @author Vendor * @copyright Copyright (c) 2019 Vendor (https://www.vendor.com/) */ namespace Vendor\ModuleName\Logger\Handler; use Magento\Framework\Logger\Handler\Base as BaseHandler; use Monolog\Logger as MonologLogger; /** * Class ErrorHandler */ class ErrorHandler extends BaseHandler { /** * Logging level * * @var int */ protected $loggerType = MonologLogger::ERROR; /** * File name * * @var string */ protected $fileName = '/var/log/my_custom_logger/error.log'; } -
在模块的文件中将此类的处理程序定义为虚拟类型
di.xml。code language-xml <virtualType name="MyCustomLogger" type="Magento\Framework\Logger\Monolog"> <arguments> <argument name="handlers" xsi:type="array"> <item name="error" xsi:type="object">Vendor\ModuleName\Logger\Handler\ErrorHandler</item> </argument> </arguments> </virtualType>MyCustomLogger是唯一标识符。 -
在
type定义中,指定插入自定义记录器处理程序的类名。 使用上一步中的虚拟类型名称作为此类型的参数。code language-xml <type name="Vendor\ModuleName\Observer\MyObserver"> <arguments> <argument name="logger" xsi:type="object">MyCustomLogger</argument> </arguments> </type>Vendor\ModuleName\Observer\MyObserver类的Source代码:code language-php <?php /** * @author Vendor * @copyright Copyright (c) 2019 Vendor (https://www.vendor.com/) */ declare(strict_types=1); namespace Vendor\ModuleName\Observer; use Psr\Log\LoggerInterface as PsrLoggerInterface; use Exception; use Magento\Framework\Event\ObserverInterface; use Magento\Framework\Event\Observer; /** * Class MyObserver */ class MyObserver implements ObserverInterface { /** * @var PsrLoggerInterface */ private $logger; /** * MyObserver constructor. * * @param PsrLoggerInterface $logger */ public function __construct( PsrLoggerInterface $logger ) { $this->logger = $logger; } /** * @param Observer $observer */ public function execute(Observer $observer) { try { // some code goes here } catch (Exception $e) { $this->logger->error($e->getMessage()); } } } -
类
Vendor\ModuleName\Logger\Handler\ErrorHandler被插入到error中$logger属性的Vendor\ModuleName\Observer\MyObserver处理程序中。code language-xml ... <argument name="handlers" xsi:type="array"> <item name="error" xsi:type="object">Vendor\ModuleName\Logger\Handler\ErrorHandler</item> </argument> ...
异常消息记录在/var/log/my_custom_logger/error.log文件中。