2015-04-14 3 views
1

Я использую Symfony для приложения запустить хроны, который работает каждый деньМонолога регистрирует файл для каждого сеанса

Я хочу использовать монолог написать info отчет, который я могу затем по электронной почте, так что я ищу для способ разделить файлы по идентификатору сеанса. Пример:

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

Это можно сделать?

+0

Каждый раз, когда запускается ваш cron, он создает новое приложение Symfony? – Med

+0

да cron запускает новый экземпляр symfony – user3886650

ответ

1

Вы должны переопределить 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 [...] 
    ** 
} 

Теперь вы можете использовать %kernel.session_id% в вашем config.yml

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 в качестве аргумента вашего скрипта

+0

Brilliant - спасибо! – user3886650