Como fazer log de Mensagens em Arquivos Diferentes

Novo na versão 2.1: A capacidade de especificar os canais para um manipulador específico foi adicionada ao MonologBundle para o Symfony 2.1.

A Edição Standard do Symfony contém vários canais para log: doctrine, event, security e request. Cada canal corresponde a um serviço logger (monolog.logger.XXX) no container e, é injetado no serviço em questão. A finalidade dos canais é de serem capazes de organizar diferentes tipos de mensagens de log.

Por padrão, o Symfony2 realiza o log de todas as mensagens em um único arquivo (independentemente do canal).

Mudando um canal para um Handler diferente

Agora, suponha que você queira registrar o canal doctrine para um arquivo diferente.

Para isso, basta criar um novo manipulador (handler) e configurá-lo como segue:

  • YAML
    monolog:
        handlers:
            main:
                type: stream
                path: /var/log/symfony.log
                channels: !doctrine
            doctrine:
                type: stream
                path: /var/log/doctrine.log
                channels: doctrine
    
  • XML
    <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>
    

Especificação Yaml

Você pode especificar a configuração de várias formas:

channels: ~    # Include all the channels

channels: foo  # Include only channel "foo"
channels: !foo # Include all channels, except "foo"

channels: [foo, bar]   # Include only channels "foo" and "bar"
channels: [!foo, !bar] # Include all channels, except "foo" and "bar"

channels:
    type:     inclusive # Include only those listed below
    elements: [ foo, bar ]
channels:
    type:     exclusive # Include all, except those listed below
    elements: [ foo, bar ]

Criando o seu próprio Canal

Você pode mudar o canal que monolog faz o log para um serviço de cada vez. Isto é feito adicionando a tag monolog.logger ao seu serviço e especificando qual canal o serviço deve fazer o log. Ao fazer isso, o logger que é injetado naquele serviço é pré-configurado para usar o canal que você especificou.

Para mais informações - incluindo um exemplo completo - leia “dic_tags-monolog” na seção de referência das Tags de Injeção de Dependência.

Aprenda mais no Cookbook