我在Symfony2应用程序中有以下配置条目:
monolog:
channels:
- channel1
- channel2
handlers:
main:
channels: !channel2
type: error_log
custom:
channels: channel2
level: info
type: stream
path: %logs_base_path%/file.log
从MonologBundle 2.4开始,为我创建了服务monolog.logger.channel1
和monolog.logger.channel2
。顺便说一下,我正在使用MonologBundle 2.6.1。
当我在其中一个服务中注入channel2
的记录器并记录一条消息时,我在file.log
中发现了相同的消息重复了11次(!)。
过了一段时间,我检查了生成的容器文件,我发现了这个:
protected function getMonolog_Logger_Channel2Service()
{
$a = $this->get('monolog.handler.custom');
$this->services['monolog.logger.channel2'] = $instance = new \Symfony\Bridge\Monolog\Logger('channel2');
$instance->pushHandler($a);
$instance->pushHandler($a);
$instance->pushHandler($a);
$instance->pushHandler($a);
$instance->pushHandler($a);
$instance->pushHandler($a);
$instance->pushHandler($a);
$instance->pushHandler($a);
$instance->pushHandler($a);
$instance->pushHandler($a);
$instance->pushHandler($a);
$instance->pushHandler($this->get('monolog.handler.debug'));
return $instance;
}
这解释了我的问题:我在我的自定义记录器中为channel2推送了11次相同的处理程序。我的monolog配置有什么问题吗?我会检查容器文件的代码生成器,但我不知道在哪里看。
FWIW:channel1
已正确注册(它与任何自定义处理程序无关)。