[Atwix 제공]{class="badge informative" title="아트윅스"} [PaaS만]{class="badge informative" title="Adobe Commerce 온 클라우드 프로젝트(Adobe 관리 PaaS 인프라) 및 온프레미스 프로젝트에만 적용됩니다."}
사용자 지정 로그 파일에 쓰기
Magento\Framework\Logger 모듈에는 다음 처리기 클래스가 포함되어 있습니다.
/var/log/debug.log/var/log/exception.log/var/log/system.loglib/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 파일에 기록됩니다.