Magento2のログをカスタマイズしたり、拡張したりする必要はありません。あなたが言ったように、わずかなカスタマイズでMonologを使用しています。Monologを拡張する独自のロガーを作成するだけで、ほとんど労力を要しません。
モジュールが次の場所にあると仮定しますYourNamespace/YourModule
。
1)ロガークラスを記述しLogger/Logger.php
ます。
<?php
namespace YourNamespace\YourModule\Logger;
class Logger extends \Monolog\Logger
{
}
2)でHandlerクラスを記述し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コードを使用する唯一の手順です。\Magento\Framework\Logger\Handler\Base
Monologを拡張しStreamHandler
、たとえば、Magentoベースパスを$ fileName属性に追加します。
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');
}
}