Magento2의 로깅을 사용자 정의하거나 확장하지 않아도됩니다. 당신이 말했듯이 약간의 사용자 정의만으로 Monolog를 사용하고 있습니다. 적은 노력으로 Monolog를 확장하는 자신의 로거를 작성하는 것으로 충분합니다.
모듈이 있다고 가정 YourNamespace/YourModule
:
1) 로거 클래스 작성 Logger/Logger.php
:
<?php
namespace YourNamespace\YourModule\Logger;
class Logger extends \Monolog\Logger
{
}
2) 핸들러 클래스 작성 Logger/Handler.php
:
<?php
namespace YourNamespace\YourModule\Logger;
use Monolog\Logger;
class Handler extends \Magento\Framework\Logger\Handler\Base
{
/**
* Logging level
* @var int
*/
protected $loggerType = Logger::INFO;
/**
* File name
* @var string
*/
protected $fileName = '/var/log/myfilename.log';
}
참고 :이 단계는 마 젠토 코드를 사용하는 유일한 단계입니다. \Magento\Framework\Logger\Handler\Base
Monolog를 확장 StreamHandler
하고 예를 들어 $ agentName 속성 앞에 Magento 기본 경로를 추가합니다.
3) 의존성 주입의 로거 등록 etc/di.xml
:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
<type name="YourNamespace\YourModule\Logger\Handler">
<arguments>
<argument name="filesystem" xsi:type="object">Magento\Framework\Filesystem\Driver\File</argument>
</arguments>
</type>
<type name="YourNamespace\YourModule\Logger\Logger">
<arguments>
<argument name="name" xsi:type="string">myLoggerName</argument>
<argument name="handlers" xsi:type="array">
<item name="system" xsi:type="object">YourNamespace\YourModule\Logger\Handler</item>
</argument>
</arguments>
</type>
</config>
참고 : 반드시 필요한 것은 아니지만 DI가 특정 인수를 생성자에 전달할 수 있습니다. 이 단계를 수행하지 않으면 생성자를 조정하여 핸들러를 설정해야합니다.
4) Magento 클래스에서 로거를 사용하십시오.
이것은 의존성 주입에 의해 수행됩니다. 아래에는 로그 항목 만 쓰는 더미 클래스가 있습니다.
<?php
namespace YourNamespace\YourModule\Model;
class MyModel
{
/**
* Logging instance
* @var \YourNamespace\YourModule\Logger\Logger
*/
protected $_logger;
/**
* Constructor
* @param \YourNamespace\YourModule\Logger\Logger $logger
*/
public function __construct(
\YourNamespace\YourModule\Logger\Logger $logger
) {
$this->_logger = $logger;
}
public function doSomething()
{
$this->_logger->info('I did something');
}
}