Symfony2: use processadores ao logar arquivos diferentes
Eu quero gravar meus logs de aplicativo em outro arquivo que não aquele que o Symfony2 grava seus próprios logs e logs do sistema. Eu entendi que eu precisava criar um serviço próprio assim:
services:
actionslogger:
class: Symfony\Bridge\Monolog\Logger
arguments: [app]
calls:
- [pushHandler, [@actionslogger_handler]]
actionslogger_handler:
class: Monolog\Handler\StreamHandler
arguments: [%kernel.logs_dir%/actions_%kernel.environment%.log, 200]
Isso funciona bem quando eu uso$ logger = $ this-> get ('actionslogger'); na minha aplicação, então tudo bem. Mas também quero usar um Formatador e um Processador para gerenciar a maneira como meus logs são gravados. Para fazer isso, eu uso essa configuração:
services:
actionslogger.formatter.session_request:
class: Monolog\Formatter\LineFormatter
arguments:
- "[%%datetime%%] [%%extra.token%%] %%channel%%.%%level_name%%: %%message%%\n"
actionslogger.processor.session_request:
class: My\Bundle\LogProcessor
arguments: [ @session ]
tags:
- { name: actionslogger.processor, method: processRecord }
Eu posso usar este Formatador e Processador com o logger padrão do Symfony2 com esta configuração:
monolog:
handlers:
main:
type: stream
path: %kernel.logs_dir%/%kernel.environment%.log
level: debug
formatter: actionslogger.formatter.session_request
Mas se eu puder usar o Formatador com meu próprio registrador, não posso usar o Processador. Aqui está minha configuração:
services:
actionslogger.formatter.session_request:
class: Monolog\Formatter\LineFormatter
arguments:
- "[%%datetime%%] [%%extra.token%%] %%channel%%.%%level_name%%: %%message%%\n"
actionslogger.processor.session_request:
class: My\Bundle\LogProcessor
arguments: [ @session ]
tags:
- { name: actionslogger.processor, channel: app, method: processRecord, handler: @actionslogger_handler }
actionslogger:
class: Symfony\Bridge\Monolog\Logger
arguments: [app]
calls:
- [pushHandler, [@actionslogger_handler]]
actionslogger_handler:
class: Monolog\Handler\StreamHandler
arguments: [%kernel.logs_dir%/actions_%kernel.environment%.log, 200]
calls:
#- [pushProcessor, [???]]
- [setFormatter, [@actionslogger.formatter.session_request]]
O canal e o manipulador de tags na configuração do Processador parecem inúteis.
O que posso fazer para que o processador funcione com o meu registrador? O que devo passar para o método pushProcessor na linha comentada (se essa puder ser uma opção válida)?
Obrigado pela ajuda.
Nota: usando o Symfony 2.0.0