首页 文章

Symfony 2:为服务注入特定通道/处理程序的 Logger

提问于
浏览
6

我正在研究Symfony 2网络应用程序,我想使用特定 Channels 向服务注入Monolog Logger :

配置:

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:记录下来!

The Problem: 虽然我使用 alert 通道专门注入 Logger ,但消息由 main 处理程序处理 . 因此,消息将记录到 prod.log 文件而不是 prod.alert.log 文件中 .

当我将 channels: [!alert] 行留作注释时,该消息将记录到 prod.log . 当我通过删除注释激活此行时,根本不记录消息(主处理程序正确地忽略了通道) .

为了使用特定的处理程序来定位特定的日志文件,邮件程序等,我有什么要做的? alert 通道的消息应由 alert 处理程序处理,而忽略所有其他处理程序 .

1 回答

  • 4

    使用为 Monolog 处理程序创建的特殊服务:

    services:
        some_service:
            class: Namespace\Some\Service
            arguments: ["@monolog.logger.alert"]
    

相关问题