2011-11-23 11 views
12

He buscado mucho antes de publicar mi pregunta. No encontré una respuesta clara, así que aquí está.Symfony 2: inicie sesión en un archivo específico

Quiero registrar mensajes en un archivo de registro diferente como dev.log o prod.log. Me refiero a un archivo que no será contaminado por los mensajes centrales de Symfony. Escuché sobre logger y handler en monólogo, pero no está muy claro.

¿Cómo puedo registrar mensajes de mis controladores, modelo a un archivo de registro específico?

+3

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

+1

Esta torcedura ISS de un duplicado, debido a que su el enlace es solo parte de la solución. Traté de agregar estos servicios en app/config/config.yml, pero no tenía forma de hacerlo funcionar. Ningún archivo de registro creado hasta ahora. – frinux

Respuesta

22

hay que añadir la información al archivo services.yml, no el archivo config.yml:

Así que en services.yml (o services.xml) tiene

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] 

y en su controlador acción que utiliza:

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

Gracias por su respuesta, pero con NetBeans, recibí un error al usar: [@ my_service.logger_handler] para que funcione, tuve que agregar presupuestos: ["@ my_service.logger_handler"] Espero que ayude. – Ashbay

+0

para mí solo funcionó después de que lo agregué en los servicios :, no directamente en el archivo yml – Andreas

2

La respuesta anterior funcionó perfectamente bien para mí. Tuve que adaptarlo, ya que mi configuración estaba en xml y no en yaml.

Aquí está la misma configuración pero usando 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>