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

时间:2015-02-02 14:17:53

标签: symfony logging monolog symfony-2.6

我想为每个会话创建一个自己的日志文件 我已经看到可以创建一个自己的记录器(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处理程序将其直接连接到会话? 覆盖这条路对我来说很清楚。

1 个答案:

答案 0 :(得分:0)

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

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