[寄稿:Atwix]{class="badge informative" title="Atwix"} [PaaS のみ]{class="badge informative" title="Adobe Commerce on Cloud プロジェクト(Adobeが管理する PaaS インフラストラクチャ)およびオンプレミスプロジェクトにのみ適用されます。"}
カスタムログファイルへの書き込み
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は一意の ID です。 -
type定義で、カスタムロガーハンドラーが挿入されるクラス名を指定します。 このタイプの引数として、前の手順で指定した仮想タイプ名を使用します。code language-xml <type name="Vendor\ModuleName\Observer\MyObserver"> <arguments> <argument name="logger" xsi:type="object">MyCustomLogger</argument> </arguments> </type>クラスのSource コ
Vendor\ModuleName\Observer\MyObserverド: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 ファイルに記録されます。