[由Atwix提供]{class="badge informative" title="Atwix"} [僅限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檔案中。