Symfony Monolog 重写同一个文件

Symfony Monolog rewrites the same file

我用 Monolog 服务:

cmd_local.logger:
        class:     Symfony\Bridge\Monolog\Logger
        arguments: [app]
        calls:
            - [pushHandler, [@cmd_local.logger_handler]]

    cmd_local.logger_handler:
        class:     Monolog\Handler\StreamHandler
        arguments: [%kernel.logs_dir%/%kernel.environment%.cmd.local.log, 200]

我现在需要的是当这个文件超过 x 天时重写(或删除和写入)同一个文件。

我阅读了有关日志轮换的内容,但这不是我需要的。我不需要用另一个名字保存这个文件并开始重写它。我只想重写这个文件。我该怎么做?

您可以为自定义记录器创建自定义处理程序(一天 = 一个日志文件)。

class FilenameContainsDateStreamHandler extends StreamHandler
{

public function __construct(
    $stream,
    $level = Logger::DEBUG,
    $bubble = true,
    $filePermission = null,
    $useLocking = false
) {
    $stream = str_replace(
        '.log', '-' . date('Y-m-d') . '.log', $stream
    );

    parent::__construct(
        $stream,
        $level,
        $bubble,
        $filePermission,
        $useLocking
    );
}
}

并重新注册新的记录器

your.logger:
    class: Symfony\Bridge\Monolog\Logger
    arguments: [your_tag]
    calls:
        - [pushHandler, [@your.monolog.handler]]
your.monolog.handler:
    class: AppBundle\Monolog\Handler\FilenameContainsDateStreamHandler
    arguments: [%kernel.logs_dir%/your.log]

$this->get('your.logger')->info();

还有一个

crm.logger:
    class: Symfony\Bridge\Monolog\Logger
    arguments: [crm_tag]
    calls:
        - [pushHandler, [@crm.monolog.handler]]
crm.monolog.handler:
    class: AppBundle\Monolog\Handler\FilenameContainsDateStreamHandler
    arguments: [%kernel.logs_dir%/crm.log]

$this->get('crm.logger')->info();