如何更改某些控制器的 Monolog 通道 Symfony 3.4 或 4+
How to change Monolog channel for some controllers Symfony 3.4 or 4+
我想换Monolog频道。我的声明适用于某些 类 但不适用于控制器。
这是我的新 admin 频道声明:
#config/packages/dev/monolog.yaml
monolog:
handlers:
admin:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%-admin.log"
level: debug
channels: ["admin"]
我通过添加标签成功地将它与我的身份验证器一起使用:
#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}
services.yaml
文件的最后一行完成工作,我的身份验证器不再登录 app 频道,而是登录 admin频道。
现在,我想将此通道与 Admin 子目录下的控制器一起使用,因此我在声明中添加了类似的标签:
#config/services.yaml
App\Controller\Admin\:
resource: '../src/Controller/Admin'
tags:
- 'controller.service_arguments'
- { name: monolog.logger, channel: admin}
不过好像没什么影响。我还在登录 app 频道。
(我做了一些验证,比如刷新缓存)。我没有找到我的错误。
我用标签法搞不懂。但是,您可以将独白通道定义为控制器构造函数的参数:
# monolog package configuration
monolog:
channels: [ 'admin' ]
handlers:
admin:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%-admin.log"
level: debug
channels: ["admin"]
Auto-wiring配置:
#config/services.yaml
App\Controller\Admin\:
resource: '../src/Controller/Admin'
arguments:
$logger: '@monolog.logger.admin'
tags:
- 'controller.service_arguments'
并在您的控制器中
/**
* SecurityController constructor.
* @param LoggerInterface $logger
*/
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
我没试过,但这很可能是因为你的控制器没有实现 LoggerAwareInterface
因此记录器标签没有影响。
检查哪个接口 AdminAuthenticator
正在实施(以查看记录器是如何设置的)然后对它应该工作的控制器执行相同的操作。
#services.yaml
App\Controller\Admin\:
resource: '../src/Controller/Admin'
calls:
- [ setLogger, [ '@logger' ] ]
tags:
- 'controller.service_arguments'
- { name: monolog.logger, channel: admin}
我想换Monolog频道。我的声明适用于某些 类 但不适用于控制器。
这是我的新 admin 频道声明:
#config/packages/dev/monolog.yaml
monolog:
handlers:
admin:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%-admin.log"
level: debug
channels: ["admin"]
我通过添加标签成功地将它与我的身份验证器一起使用:
#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}
services.yaml
文件的最后一行完成工作,我的身份验证器不再登录 app 频道,而是登录 admin频道。
现在,我想将此通道与 Admin 子目录下的控制器一起使用,因此我在声明中添加了类似的标签:
#config/services.yaml
App\Controller\Admin\:
resource: '../src/Controller/Admin'
tags:
- 'controller.service_arguments'
- { name: monolog.logger, channel: admin}
不过好像没什么影响。我还在登录 app 频道。 (我做了一些验证,比如刷新缓存)。我没有找到我的错误。
我用标签法搞不懂。但是,您可以将独白通道定义为控制器构造函数的参数:
# monolog package configuration
monolog:
channels: [ 'admin' ]
handlers:
admin:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%-admin.log"
level: debug
channels: ["admin"]
Auto-wiring配置:
#config/services.yaml
App\Controller\Admin\:
resource: '../src/Controller/Admin'
arguments:
$logger: '@monolog.logger.admin'
tags:
- 'controller.service_arguments'
并在您的控制器中
/**
* SecurityController constructor.
* @param LoggerInterface $logger
*/
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
我没试过,但这很可能是因为你的控制器没有实现 LoggerAwareInterface
因此记录器标签没有影响。
检查哪个接口 AdminAuthenticator
正在实施(以查看记录器是如何设置的)然后对它应该工作的控制器执行相同的操作。
#services.yaml
App\Controller\Admin\:
resource: '../src/Controller/Admin'
calls:
- [ setLogger, [ '@logger' ] ]
tags:
- 'controller.service_arguments'
- { name: monolog.logger, channel: admin}