feat: log request ids to map xml dumps of bpn api communication

This commit is contained in:
Björn Fromme
2026-03-16 12:02:27 +01:00
parent fedfcc247e
commit f55ed3dc4c
5 changed files with 67 additions and 3 deletions
+1 -1
View File
@@ -104,4 +104,4 @@ when@prod:
type: stream
channels: [deprecation]
path: php://stderr
formatter: monolog.formatter.json
formatter: monolog.formatter.json
+5
View File
@@ -132,3 +132,8 @@ services:
arguments:
$httpClient: '@typo3.client'
$apiKey: 'AbcAbc123'# dummy key, not yet implemented
App\Logger\RequestIdProcessor:
tags:
- { name: monolog.processor }
+10 -2
View File
@@ -25,6 +25,7 @@ use App\Form\Model\RegistrationDto;
use League\Flysystem\FilesystemException;
use League\Flysystem\FilesystemOperator;
use Psr\Log\LoggerInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Serializer\Encoder\XmlEncoder;
use Symfony\Component\Serializer\SerializerInterface;
@@ -55,6 +56,7 @@ class ApiClient
private readonly FilesystemOperator $xmlDump,
private readonly LoggerInterface $logger,
private readonly BookingDataProcessor $bookingDataProcessor,
private readonly RequestStack $requestStack,
array $options,
) {
$this->config = $this->resolveOptions($options);
@@ -516,7 +518,7 @@ class ApiClient
*/
private function doSendRawXml(string $xml, bool $debug = false): string
{
$requestId = date(DATE_ATOM).uniqid();
$requestId = $this->getRequestId();
$doc = new \DOMDocument();
if (false === @$doc->loadXML($xml)) {
@@ -631,7 +633,7 @@ class ApiClient
*/
private function doSendRequest(string $type, array $data, array $additionalArgs = [], bool $debug = false): mixed
{
$requestId = date(DATE_ATOM).uniqid();
$requestId = $this->getRequestId();
$body = $this
->serializer
@@ -685,6 +687,12 @@ class ApiClient
}
}
private function getRequestId(): string
{
return $this->requestStack->getMainRequest()?->attributes->get('request_id')
?? date(DATE_ATOM).uniqid();
}
private function createKey(string $username, string $password, string $type): string
{
$date = (new \DateTimeImmutable())->format('Ymd');
+23
View File
@@ -0,0 +1,23 @@
<?php
declare(strict_types=1);
namespace App\EventListener;
use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
#[AsEventListener(event: KernelEvents::REQUEST, priority: 255)]
class RequestIdListener
{
public function __invoke(RequestEvent $event): void
{
if (false === $event->isMainRequest()) {
return;
}
$requestId = date(DATE_ATOM).uniqid();
$event->getRequest()->attributes->set('request_id', $requestId);
}
}
+28
View File
@@ -0,0 +1,28 @@
<?php
declare(strict_types=1);
namespace App\Logger;
use Monolog\LogRecord;
use Monolog\Processor\ProcessorInterface;
use Symfony\Component\HttpFoundation\RequestStack;
class RequestIdProcessor implements ProcessorInterface
{
public function __construct(
private readonly RequestStack $requestStack,
) {
}
public function __invoke(LogRecord $record): LogRecord
{
$requestId = $this->requestStack->getMainRequest()?->attributes->get('request_id');
if (null !== $requestId) {
$record->extra['request_id'] = $requestId;
}
return $record;
}
}