3

私はSymfony2.2とMonologパッケージを使用しています。

Monologの私のハンドラー:

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

ただし、ディレクトリが存在しない場合、ストリームハンドラはディレクトリを自動作成しません。ディレクトリを自動作成する方法は?イベントディスパッチャはできますが、monologにイベントが表示されません((

感謝。

4

1 に答える 1

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 ハンドラをオーバーライドする基本的な例です!

于 2013-03-09T21:14:40.790 に答える