Symfony 2.2& Monolog流处理程序 - 自动创建目录

时间:2013-02-25 11:57:35

标签: symfony monolog

我使用Symfony 2.2和Monolog包。

我在Monolog的处理程序:

monolog:
    handlers:
        type: stream
        path: "%kernel.logs_dir%/%kernel.environment%/my-path/error.log"
        level: error

但是如果目录不存在,则流处理程序不会自动创建目录。 如何自动创建目录?可以事件调度员,但我没有看到monolog上的事件((

感谢。

1 个答案:

答案 0 :(得分:3)

解决这个问题:

  • 创建自己的流处理程序
  • 覆盖基本流处理程序

示例:

流处理程序:

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处理程序!