如何在标记服务的独白处理程序中使用定义的通道?

How can one use a defined channel, in monolog handler from a tagged service?

我有以下独白处理程序定义:

    # config_prod.yml
    app_generic:
        type: rotating_file
        max_files:      15
        path: "%param.app_logging_config.log_generic_file%"
        level: info
        channels: [app]

    app_api:
         max_files: 15
         path: "%param.app_logging_config.log_api_file%"
         level: info
         channels: [app]
         level: info

    app_response:
        max_files: 15
        path: "%param.app_logging_config.log_response_file%"
        channels: [app]
        level: info

而在 service.yml 中,我的目的是使用上述定义的处理程序数组注入 monolog (@logger)。

#service.yml
app.app_logger:
    class: AppBundle\Classes\AppLogger
    arguments: ['@logger': ['@app_generic', '@app_api', '@app_response']]
    calls:
      - [init, ['%app_logging_config%']
    tags:
      - { name: monolog.logger, channel: app }

如何将参数传递给注入的参数?

重新阅读 description, I was going for this 方法,只需在服务定义上添加标签:

app.logger:
    arguments: ['@logger']
    tags:
        - { name: monolog.logger, channel: app }
channels: ['app']

或者甚至(如果我理解正确的话),添加一个 channels: ['app'] 键并在服务参数中使用这个:

app.logger:
    arguments: ['@monolog.logger.app']

我无法使用(或通过转储查看)config_prod.yml 中定义的处理程序。我将它们放在顶部是因为我认为其他 "fingers_crossed" 处理程序可能会干扰。

我想知道,为什么上述(已记录的)方法似乎都不起作用?

处理程序在

monolog:
    handlers:
        handler1: ...
        handler2: ...

自动注入 @logger service

您似乎需要 自定义记录器。请阅读 The DependencyInjection Component

创建依赖关系

services:
    app_generic:
        ....
    app_api:
         ....
    app_response:
        ....

创建custom_logger服务

custom_logger:
    class: Monolog\Logger
    arguments: ["my logger", ["@app_generic", "@app_api", "@app_response"]

在您的服务中注入自定义记录器

app.app_logger:
    class: AppBundle\Classes\AppLogger
    arguments: ['@custom_logger']
    calls:
      - [init, ['%app_logging_config%']