2015-02-02 5 views
2

Я хочу создать для каждой сессии собственный файл журнала.
Я видел, что можно создать собственный регистратор (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'); 

Можно ли подключить к сеансу непосредственно с помощью службы или реализован обработчик монолога?
Переписывание пути для меня понятное.

+2

Что вы можете сделать, это имя файла журнала с значением сеанса – meda

+0

не удалось управлять разрушенным сеансом (собственный пользовательский обработчик) – Matteo

+0

@AhmedDaou Whic h обработчик поддерживает? – CSchulz

ответ

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 
Смежные вопросы