我想将我的应用程序日志写入另一个文件,而不是 Symfony2 写入自己的日志和系统日志。我知道我需要像这样创建自己的服务:
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]
当我使用$logger = $this->get('actionslogger');时效果很好 在我的应用程序中,没关系。但我也想使用格式化程序和处理器来管理我的日志写入方式。为此,我使用以下配置:
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 }
我可以将此格式化程序和处理器与 Symfony2 默认记录器与此配置一起使用:
monolog:
handlers:
main:
type: stream
path: %kernel.logs_dir%/%kernel.environment%.log
level: debug
formatter: actionslogger.formatter.session_request
但是如果我可以将格式化程序与我自己的记录器一起使用,我就不能使用处理器。这是我的配置:
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]]
处理器配置中的标签通道和处理程序似乎没用。
我该怎么做才能使处理器与我的记录器一起工作?我应该在注释行中将什么传递给 pushProcessor 方法(如果这可能是一个有效选项)?
谢谢您的帮助。
注意:使用 Symfony 2.0.0