如何为某些控制器Symfony 3.4或4+更改Monolog通道

Ale*_*ant 5 autowired symfony monolog symfony4

我想更改Monolog频道。我的声明适用于某些类,但不适用于控制器。

这是我的新管理频道声明:

#config/packages/dev/monolog.yaml
monolog:
    handlers:
        admin:
            type: stream
            path: "%kernel.logs_dir%/%kernel.environment%-admin.log"
            level: debug
            channels: ["admin"]
Run Code Online (Sandbox Code Playgroud)

通过添加标签,我可以将它与我的身份验证器一起成功使用:

#config/services.yaml
# The form guard authenticator for the admin access
app.security.admin_authenticator:
    class: App\Security\AdminAuthenticator
    autowire: true
    tags:
        - { name: monolog.logger, channel: admin}
Run Code Online (Sandbox Code Playgroud)

services.yaml文件的最后一行完成了这项工作,我的身份验证器不再登录应用程序频道,而是登录管理频道。

现在,我想将此通道与Admin子目录下的控制器一起使用,因此我在声明中添加了一个类似的标记:

#config/services.yaml
App\Controller\Admin\:
    resource: '../src/Controller/Admin'
    tags:
        - 'controller.service_arguments'
        - { name: monolog.logger, channel: admin}
Run Code Online (Sandbox Code Playgroud)

但是似乎没有影响。我仍在登录应用程序频道。(我做了一些验证,例如刷新缓存)。我找不到我的错误。

Mat*_*uth 5

我无法用标签方法弄清楚。但是,您可以将 Monolog 通道定义为控制器构造函数的参数:

# monolog package configuration
monolog:
    channels: [ 'admin' ]
    handlers:
        admin:
            type: stream
            path: "%kernel.logs_dir%/%kernel.environment%-admin.log"
            level: debug
            channels: ["admin"]
Run Code Online (Sandbox Code Playgroud)

自动接线配置:

#config/services.yaml
App\Controller\Admin\:
    resource: '../src/Controller/Admin'
    arguments:
        $logger: '@monolog.logger.admin'
    tags:
        - 'controller.service_arguments'
Run Code Online (Sandbox Code Playgroud)

在你的控制器中

/**
 * SecurityController constructor.
 * @param LoggerInterface $logger
 */
public function __construct(LoggerInterface $logger)
{
    $this->logger = $logger;
}
Run Code Online (Sandbox Code Playgroud)


mrb*_*rbm 4

我还没有尝试过这个,但很可能是因为您的控制器没有实现,LoggerAwareInterface因此记录器标签没有影响。

检查正在实现哪个接口AdminAuthenticator(以查看记录器的设置方式),然后对其应该工作的控制器执行相同的操作。

#services.yaml
App\Controller\Admin\:
    resource: '../src/Controller/Admin'
    calls:
        - [ setLogger, [ '@logger' ] ]
    tags:
        - 'controller.service_arguments'
        - { name: monolog.logger, channel: admin}
Run Code Online (Sandbox Code Playgroud)