如何为每个会话创建一个日志文件?

How to create one log file per session?

我想为每个会话创建一个自己的日志文件。
我已经看到可以创建自己的记录器 (source):

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

// create a log channel
$log = new Logger('name');
$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));

// add records to the log
$log->addWarning('Foo');
$log->addError('Bar');

是否可以使用服务或实现的 monolog 处理程序将其直接连接到会话?
覆盖路径对我来说很清楚。

您可以创建自己的处理程序:

class LogSessionHandler extends AbstractProcessingHandler
{
  protected $session;

  public function setSession(\Symfony\Component\HttpFoundation\Session\Session $session)
  {
    $this->session = $session;
  }

  protected function write(array $record)
  {
    $fp = fopen('/path/to/log/'.$this->session->getId().'.log','a');
    if ($fp) fwrite($fp, (string) $record['formatted']);
    fclose($fp);
  }
}

在services.yml中:

logger_session:
    class: ..\..\SessionDatabaseHandler
    calls:
        - [ setSession, [ @session ] ]

在config_prod.yml中:

monolog:
    handlers:
        ...
        session:
            type: service
            level: error
            id: logger_session