Symfony Monolog重写相同的文件

时间:2016-02-02 14:57:38

标签: symfony monolog

我在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 天时重写(或删除并写入)同一文件。

我读到了关于日志轮换的内容,但这不是我需要的内容。我不需要使用其他名称保存此文件并开始重写它。我只是想重写这个文件。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

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

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]

$这 - >获得(' your.logger') - >信息();

还有一个

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]

$这 - >获得(' crm.logger') - >信息();