[Atwix 제공]{class="badge informative" title="아트윅스"}

사용자 지정 로그 파일에 쓰기

다음 Magento\Framework\Logger 모듈에는 다음 핸들러 클래스가 포함되어 있습니다.

다음 위치에서 찾을 수 있습니다. lib/internal/Magento/Framework/Logger/Handler 디렉토리.

다음 방법 중 하나를 사용하여 사용자 정의 파일에 로그인할 수 있습니다.

  • 에서 사용자 지정 로그 파일 설정 di.xml
  • 사용자 지정 로거 처리기 클래스에서 사용자 지정 파일 설정

에서 사용자 지정 로그 파일 설정 di.xml

이 예는 를 사용하는 방법을 보여 줍니다 가상 유형 기록하기 debug 표준 대신 사용자 지정 로그 파일에 메시지 /var/log/debug.log.

  1. 다음에서 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>
    

    다음 nameMagento\Payment\Model\Method\MyCustomDebug 은(는) 고유해야 합니다.

  2. 다른 작업 영역에서 핸들러 정의 가상 유형 고유 포함 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>
    
  3. 삽입 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>
    
  4. 가상 클래스 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 특정 로그 파일에 메시지를 남깁니다.

  1. 데이터를 기록하는 클래스를 만듭니다. 이 예제에서 클래스는 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';
    }
    
  2. 이 클래스의 핸들러를 다음으로 정의 가상 유형 의 모듈에서 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 는 고유 식별자입니다.

  3. 다음에서 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 클래스:

    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());
            }
        }
    }
    
  4. 클래스 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 파일.

recommendation-more-help
386822bd-e32c-40a8-81c2-ed90ad1e198c