我想将我的应用程序日志写入另一个文件,而不是 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