この問題を解決する:
- 独自のストリーム ハンドラを作成する
- ベース ストリーム ハンドラをオーバーライドする
例:
ストリーム ハンドラ:
namespace Acme\DemoBundle\Component\Monolog;
use Monolog\Handler\StreamHandler as BaseStreamHandler;
class StreamHandler extends BaseStreamHandler
{
/**
* @{inerhitDoc}
*/
public function write(array $record)
{
if (null === $this->stream) {
// From original monolog stream handler
if (!$this->url) {
throw new \LogicException('Missing stream url, the stream can not be opened. This may be caused by a premature call to close().');
}
$dir = dirname($this->url);
if (!is_dir($dir)) {
if(!@mkdir($dir, 0777, TRUE)) {
// Control errors
}
}
}
parent::write($record);
}
}
そして、symfony monolog パッケージのベース ストリーム ハンドラーをオーバーライドします。
<parameter key="monolog.handler.stream.class">Acme\DemoBundle\Component\Monolog\StreamHandler</parameter>
注意:
これは、Symfony 2 パッケージの monolog ハンドラをオーバーライドする基本的な例です!