我正在研究Symfony 2网络应用程序,我想使用特定渠道向服务注入Monolog记录器:
配置:
monolog:
handlers:
main:
type: stream
path: %kernel.root_dir%/%kernel.environment%.log
level: error
#channels: [!alert]
alert:
type: stream
path: %kernel.root_dir%/%kernel.environment%.alert.log
level: info
channels: [alert]
服务配置:
services:
some_service:
class: Some\Service
arguments: [@logger]
tags:
- { name: monolog.logger, channel: alert }
服务:
class SomeService {
protected $logger;
public function __construct($logger) {
$this->logger = $logger;
$this->logger->info('Log this!');
}
prod.log文件:
[2016-03-28 11:25:47] alert.INFO:记录下来!
问题:虽然我使用alert
频道专门注入记录器,但消息由main
处理程序处理。因此,消息将记录到prod.log
文件而不是prod.alert.log
文件中。
当我将第channels: [!alert]
行留作评论时,该消息会记录到prod.log
。当我通过删除注释激活此行时,根本不记录消息(主处理程序正确地忽略了通道)。
为了使用特定的处理程序来定位特定的日志文件,邮件程序等,我有什么要做的?发送到alert
频道的消息应由alert
处理程序处理,而忽略所有其他处理程序。
答案 0 :(得分:4)
使用为Monolog
处理程序创建的特殊服务:
services:
some_service:
class: Namespace\Some\Service
arguments: ["@monolog.logger.alert"]