<?php
declare(strict_types=1);
namespace FlexApp\Service;
use FlexApp\DTO\LogMessageDto;
use Monolog\Logger as MessageLevel;
use Symfony\Component\Messenger\MessageBus;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Messenger\Middleware\MiddlewareInterface;
class LogsManager
{
private string $appName;
private MessageBusInterface $bus;
public function __construct(
MessageBusInterface $bus,
string $appName
) {
$this->bus = $bus;
$this->appName = $appName;
}
/**
* Создание менеджера без DI-контейнера
* @param string $appName
* @param MiddlewareInterface[] $middleware
* @return LogsManager
*/
public static function create(string $appName, array $middleware = []): self
{
$messageBus = new MessageBus($middleware);
return new self($messageBus, $appName);
}
public function logDebug(array $params, string $job)
{
$this->log($params, MessageLevel::getLevelName(MessageLevel::DEBUG), $job);
}
public function logError(array $params, string $job)
{
$this->log($params, MessageLevel::getLevelName(MessageLevel::ERROR), $job);
}
public function logInfo(array $params, string $job)
{
$this->log($params, MessageLevel::getLevelName(MessageLevel::INFO), $job);
}
public function logWarning(array $params, string $job)
{
$this->log($params, MessageLevel::getLevelName(MessageLevel::WARNING), $job);
}
private function log(array $params, string $level, string $job)
{
$params = new LogMessageDto(
json_encode($params, JSON_UNESCAPED_UNICODE),
$level,
$job,
$this->appName
);
$this->bus->dispatch($params);
}
public function getAppName(): string
{
return $this->appName;
}
public function setAppName(string $appName): void
{
$this->appName = $appName;
}
}