[Atwix 제공]{class="badge informative" title="아트윅스"} [PaaS만]{class="badge informative" title="Adobe Commerce 온 클라우드 프로젝트(Adobe 관리 PaaS 인프라) 및 온프레미스 프로젝트에만 적용됩니다."}

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

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 클래스의 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());
            }
        }
    }
    
  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