<?php
declare(strict_types=1);
namespace WnsSecurityComplianceSuite\Logging\Subscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use WnsSecurityComplianceSuite\Logging\DTO\Log;
use WnsSecurityComplianceSuite\Logging\Provider\SourceInfoProvider;
use WnsSecurityComplianceSuite\Logging\Service\ActionLogger;
use WnsSecurityComplianceSuite\Util\Event\EmitLogEvent;
final class LogEventSubscriber implements EventSubscriberInterface
{
private ActionLogger $actionLogger;
private SourceInfoProvider $sourceInfoProvider;
public function __construct(
ActionLogger $actionLogger,
SourceInfoProvider $sourceInfoProvider
) {
$this->actionLogger = $actionLogger;
$this->sourceInfoProvider = $sourceInfoProvider;
}
public static function getSubscribedEvents()
{
return [
EmitLogEvent::class => 'logCustomEvent',
];
}
public function logCustomEvent(EmitLogEvent $event): void
{
$source = $this->sourceInfoProvider->getSourceDTO($event->getContext()->getSource());
$log = new Log(
$event->getEventType(),
$source,
$event->getDetails(),
new \DateTimeImmutable(),
);
$this->actionLogger->log($log, null);
}
}