每个会话的 Monolog 日志文件

Monolog logs file for every session

我将 symfony 用于一个每天 运行 的 cron 运行 应用程序

我想使用 monolog 编写一份 info 报告,然后我可以通过电子邮件发送该报告,因此我正在寻找一种通过会话 ID 分隔文件的方法。示例:

report:
 type:   stream
 path:   "%kernel.logs_dir%/%kernel.environment%-%sessionid%.log"
 level:  info

这可以做到吗?

您必须覆盖 AppKernel:

<?php

use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Config\Loader\LoaderInterface;

class AppKernel extends Kernel
{
    protected $sessionId;

    public function __construct($environment, $debug, $sessionId)
    {
        $this->sessionId = $sessionId;

        parent::_construct($environment, $debug);
    }


    /**
     * {@inheritdoc}
     * @see \Symfony\Component\HttpKernel\Kernel::getKernelParameters()
     */
    protected function getKernelParameters()
    {
        $parameters = parent::getKernelParameters();

        // Adding session_id parameter
        $parameters['kernel.session_id'] = $this->sessionId;

        return $parameters;
    }

 /**
  * Your function here [...]
  **
}

现在您可以在 config.yml

中使用 %kernel.session_id%
monolog:
    handlers:
        report:
            type:  stream
            path: "%kernel.logs_dir%/%kernel.environment%-%kernel.session_id%.log"
            level:  info

在你的 app.php 中:

$sessionId = '123';
$kernel = new AppKernel('prod', false, $sessionId);

您只需将 $sessionId 作为脚本的参数传递