【问题标题】:Symfony 2.2 & Monolog stream handler - auto create directorySymfony 2.2 和 Monolog 流处理程序 - 自动创建目录
【发布时间】:2013-02-10 13:33:57
【问题描述】:

我使用 Symfony 2.2 和 Monolog 包。

我在 Monolog 中的处理程序:

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

但如果目录不存在,流处理程序不会自动创建目录。 如何自动创建目录?可以事件调度程序,但我在独白上看不到事件((

谢谢。

【问题讨论】:

    标签: symfony monolog


    【解决方案1】:

    解决这个问题:

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

    例子:

    流处理程序:

    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.handler.rotating_file.class做类似的事情,在参数中覆盖它并在RotatingFileHandler的构造函数之后执行文件夹创建逻辑,谢谢!
    猜你喜欢
    • 2019-09-02
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 2016-01-20
    • 2016-04-09
    • 2015-08-31
    • 2010-09-25
    • 2014-10-07
    相关资源
    最近更新 更多