Я создал собственный обработчик журнала в Symfony.Создание это не было проблемой, config: config / packages / dev / monolog.yaml
monolog:
handlers:
....
alerts:
type: service
id: App\Logger\AlertLogger
channels: [app]
level: warning
И мой сервис:
<?php
namespace App\Logger;
use Monolog\Handler\AbstractProcessingHandler;
class AlertLogger extends AbstractProcessingHandler
{
protected function write(array $record)
{
// handle log
}
}
Но проблема в том, что я хочу отправить эторегистрируется в RabbitMQ и что-то делает в Consumer, но нет никакой возможности вызвать любую другую службу.Я пытался передать его для создания, но я получаю ошибки, такие как:
Аргумент 3 передан в App \ Logger \ AlertLogger :: __ construct () должен реализовать интерфейс OldSound \ RabbitMqBundle \ RabbitMq \ ProducerInterface, stringданный, вызванный в .....
Это потому, что в AbstractProcessingHandler есть определение конструкции.
=============== РЕДАКТИРОВАТЬ: Мои тесты:
Конструктор родительского класса:
public function __construct($level = Logger::DEBUG, $bubble = true)
{
$this->setLevel($level);
$this->bubble = $bubble;
}
Я пытался добавить журналобработчик как сервис для services.yaml:
services:
.....
App\Logger\AlertLogger:
arguments:
$producer: OldSound\RabbitMqBundle\RabbitMq\Producer
И мой обработчик журнала:
...
class AlertLogger extends AbstractProcessingHandler
{
/**
* @var ProducerInterface
*/
private $producer;
public function __construct(ProducerInterface $producer)
{
$this->producer = $producer;
}
......
Но я получаю эту ошибку:
Аргумент 1 пройденв App \ Logger \ AlertLogger :: __ construct () должен реализовывать интерфейс OldSound \ RabbitMqBundle \ RabbitMq \ ProducerInterface, заданная строка вызывается в
Когда я пытаюсь установить аргументы конструкции:
....
class AlertLogger extends AbstractProcessingHandler
{
/**
* @var ProducerInterface
*/
private $producer;
public function __construct($level, $bubble, ProducerInterface $producer)
{
parent::__construct($level, $bubble);
$this->producer = $producer;
}
.....
Я получил ошибку:
Невозможно автоматически подключить службу "App \ Logger \ AlertLogger": аргумент "$ level" метода "__construct ()" не имеет подсказки типа, вам нужно настроить его значениеявно.