2011-11-23 16 views
12

Ho cercato molto prima di pubblicare la mia domanda. Non ho trovato una risposta chiara, quindi eccolo qui.Symfony 2: Accedi a un file specifico

Desidero registrare i messaggi in un file di registro diverso come dev.log o prod.log. Intendo un file che non verrà modificato dai messaggi principali di Symfony. Ho sentito parlare di logger e handler in monolog, ma non è molto chiaro.

Come posso registrare messaggi dai miei controller, modellare su un file di registro specifico?

+3

Eventuali duplicati: http://stackoverflow.com/questions/8169114/how-to-write-logs-from-one-service-into-separate-file –

+1

Questa ISS kink di un duplicato, perché la vostra il collegamento è solo una parte della soluzione. Ho provato ad aggiungere questi servizi in app/config/config.yml, ma non ho avuto modo di farlo funzionare. Nessun file di registro creato finora. – frinux

risposta

22

È necessario aggiungere le informazioni al file services.yml, non il file config.yml:

Quindi, in services.yml (o services.xml) avete

my_service.logger: 
    class:  Symfony\Bridge\Monolog\Logger 
    arguments: [app] 
    calls: 
     - [pushHandler, [@my_service.logger_handler]] 

my_service.logger_handler: 
    class:  Monolog\Handler\StreamHandler  
    arguments: [%kernel.logs_dir%/%kernel.environment%.admin.log, 200] 

e nel controllore azione che usi:

$logger = $this->get('my_service.logger'); 
+1

Grazie per la tua risposta, ma con NetBeans, ho ricevuto un errore utilizzando: [@ my_service.logger_handler] per farlo funzionare ho dovuto aggiungere delle virgolette: ["@ my_service.logger_handler"] Spero che possa aiutarti. – Ashbay

+0

per me ha funzionato solo dopo l'ho aggiunto sotto i servizi :, non direttamente nel file yml – Andreas

2

La risposta sopra ha funzionato perfettamente bene per me. Ho dovuto adattarlo anche se la mia configurazione era in xml e non in yaml.

Ecco la stessa configurazione ma utilizzando xml.

<service id="my_service.logger" class="Symfony\Bridge\Monolog\Logger"> 
    <argument type="string">app</argument> 
    <call method="pushHandler"> 
     <argument type="service" id="my_service.logger_handler" /> 
    </call> 
</service> 
<service id="my_service.logger_handler" class="Monolog\Handler\StreamHandler"> 
    <argument>type="string">%kernel.logs_dir%/%kernel.environment%.license.log</argument> 
    <argument type="string">200</argument> 
</service>