Nuevo en la versión 2.1: La habilidad para especificar canales para un controlador MonologBundle específico se añadió en Symfony 2.1.
La edición estándar de Symfony contiene un montón de canales para la anotación cronológica de eventos: doctrine, event, security y request. Cada canal corresponde a un servicio de la bitácora (monolog.logger.XXX) en el contenedor y se inyecta al servicio en cuestión. El propósito de los canales es poder organizar los diferentes tipos de mensajes de la bitácora.
De forma predeterminada, Symfony2 registra cada mensaje en un solo archivo (independientemente del canal).
Ahora, supongamos que quieres registrar los eventos del canal de doctrine a un archivo diferente.
Para ello, basta con crear un nuevo controlador y configurarlo así:
monolog:
handlers:
main:
type: stream
path: /var/log/symfony.log
channels: !doctrine
doctrine:
type: stream
path: /var/log/doctrine.log
channels: doctrine
<monolog:config>
<monolog:handlers>
<monolog:handler name="main" type="stream" path="/var/log/symfony.log">
<monolog:channels>
<type>exclusive</type>
<channel>doctrine</channel>
</monolog:channels>
</monolog:handler>
<monolog:handler name="doctrine" type="stream" path="/var/log/doctrine.log" />
<monolog:channels>
<type>inclusive</type>
<channel>doctrine</channel>
</monolog:channels>
</monolog:handler>
</monolog:handlers>
</monolog:config>
Puedes especificar la configuración de muchas formas:
channels: ~ # Incluye todos los canales
channels: foo # Incluir sólo el canal "foo"
channels: !foo # Incluye todos los canales, excepto "foo"
channels: [foo, bar] # Incluye sólo los canales "foo" y "bar"
channels: [!foo, !bar] # Incluye todos los canales, excepto "foo" y "bar"
channels:
type: inclusive # Incluir sólo los que se enumeran a continuación
elements: [ foo, bar ]
channels:
type: exclusive # Incluye todos, excepto los enumerados a continuación
elements: [ foo, bar ]
Puedes cambiar el canal en que monolog lleva su registro cronológico a un servicio a la vez. Esto se hace etiquetando tu servicio con monolog.logger y especificando a qué canal tiene que registrar el servicio. Para ello, el registro cronológico es inyectado en ese servicio preconfigurado para utilizar el canal has especificado.
Para más información —incluyendo un ejemplo completo— consulta la sección «monolog.logger» en la referencia de las Etiquetas de inyección de dependencias.