From 5584e7a4e5725944020ba6972c724b2371e2bdd6 Mon Sep 17 00:00:00 2001 From: Philipp Date: Sun, 25 Dec 2022 19:19:06 +0100 Subject: [PATCH] Use X-REQUEST-ID for Logging --- src/App/Request.php | 20 ++++++++++++++++++++ src/Core/Logger/Util/Introspection.php | 14 ++++++++++---- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/App/Request.php b/src/App/Request.php index 71b6a9ea3f..1af1206d1f 100644 --- a/src/App/Request.php +++ b/src/App/Request.php @@ -22,6 +22,7 @@ namespace Friendica\App; use Friendica\Core\Config\Capability\IManageConfigValues; +use Friendica\Core\System; /** * Container for the whole request @@ -38,9 +39,17 @@ class Request * @var string */ const DEFAULT_FORWARD_FOR_HEADER = 'HTTP_X_FORWARDED_FOR'; + /** + * The default Request-ID header to retrieve the current transaction ID from the HTTP header (if set) + * + * @var string + */ + const DEFAULT_REQUEST_ID_HEADER = 'HTTP_X_REQUEST_ID'; /** @var string The remote IP address of the current request */ protected $remoteAddress; + /** @var string The request-id of the current request */ + protected $requestId; /** * @return string The remote IP address of the current request @@ -52,9 +61,20 @@ class Request return $this->remoteAddress; } + /** + * @return string The request ID of the current request + * + * Do always use this instead of $_SERVER['X_REQUEST_ID'] + */ + public function getRequestId(): string + { + return $this->requestId; + } + public function __construct(IManageConfigValues $config, array $server = []) { $this->remoteAddress = $this->determineRemoteAddress($config, $server); + $this->requestId = $server[static::DEFAULT_REQUEST_ID_HEADER] ?? System::createGUID(8); } /** diff --git a/src/Core/Logger/Util/Introspection.php b/src/Core/Logger/Util/Introspection.php index 444af2409e..987a4e3cba 100644 --- a/src/Core/Logger/Util/Introspection.php +++ b/src/Core/Logger/Util/Introspection.php @@ -21,6 +21,7 @@ namespace Friendica\Core\Logger\Util; +use Friendica\App\Request; use Friendica\Core\Logger\Capabilities\IHaveCallIntrospections; /** @@ -28,6 +29,9 @@ use Friendica\Core\Logger\Capabilities\IHaveCallIntrospections; */ class Introspection implements IHaveCallIntrospections { + /** @var string */ + private $requestId; + /** @var int */ private $skipStackFramesCount; @@ -43,8 +47,9 @@ class Introspection implements IHaveCallIntrospections * @param string[] $skipClassesPartials An array of classes to skip during logging * @param int $skipStackFramesCount If the logger should use information from other hierarchy levels of the call */ - public function __construct(array $skipClassesPartials = [], int $skipStackFramesCount = 0) + public function __construct(Request $request, array $skipClassesPartials = [], int $skipStackFramesCount = 0) { + $this->requestId = $request->getRequestId(); $this->skipClassesPartials = $skipClassesPartials; $this->skipStackFramesCount = $skipStackFramesCount; } @@ -77,9 +82,10 @@ class Introspection implements IHaveCallIntrospections $i += $this->skipStackFramesCount; return [ - 'file' => isset($trace[$i - 1]['file']) ? basename($trace[$i - 1]['file']) : null, - 'line' => $trace[$i - 1]['line'] ?? null, - 'function' => $trace[$i]['function'] ?? null, + 'file' => isset($trace[$i - 1]['file']) ? basename($trace[$i - 1]['file']) : null, + 'line' => $trace[$i - 1]['line'] ?? null, + 'function' => $trace[$i]['function'] ?? null, + 'request-id' => $this->requestId, ]; }