Use X-REQUEST-ID for Logging

This commit is contained in:
Philipp 2022-12-25 19:19:06 +01:00
parent 10864e50c7
commit 5584e7a4e5
No known key found for this signature in database
GPG key ID: 24A7501396EB5432
2 changed files with 30 additions and 4 deletions

View file

@ -22,6 +22,7 @@
namespace Friendica\App; namespace Friendica\App;
use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\Config\Capability\IManageConfigValues;
use Friendica\Core\System;
/** /**
* Container for the whole request * Container for the whole request
@ -38,9 +39,17 @@ class Request
* @var string * @var string
*/ */
const DEFAULT_FORWARD_FOR_HEADER = 'HTTP_X_FORWARDED_FOR'; 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 */ /** @var string The remote IP address of the current request */
protected $remoteAddress; protected $remoteAddress;
/** @var string The request-id of the current request */
protected $requestId;
/** /**
* @return string The remote IP address of the current request * @return string The remote IP address of the current request
@ -52,9 +61,20 @@ class Request
return $this->remoteAddress; 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 = []) public function __construct(IManageConfigValues $config, array $server = [])
{ {
$this->remoteAddress = $this->determineRemoteAddress($config, $server); $this->remoteAddress = $this->determineRemoteAddress($config, $server);
$this->requestId = $server[static::DEFAULT_REQUEST_ID_HEADER] ?? System::createGUID(8);
} }
/** /**

View file

@ -21,6 +21,7 @@
namespace Friendica\Core\Logger\Util; namespace Friendica\Core\Logger\Util;
use Friendica\App\Request;
use Friendica\Core\Logger\Capabilities\IHaveCallIntrospections; use Friendica\Core\Logger\Capabilities\IHaveCallIntrospections;
/** /**
@ -28,6 +29,9 @@ use Friendica\Core\Logger\Capabilities\IHaveCallIntrospections;
*/ */
class Introspection implements IHaveCallIntrospections class Introspection implements IHaveCallIntrospections
{ {
/** @var string */
private $requestId;
/** @var int */ /** @var int */
private $skipStackFramesCount; private $skipStackFramesCount;
@ -43,8 +47,9 @@ class Introspection implements IHaveCallIntrospections
* @param string[] $skipClassesPartials An array of classes to skip during logging * @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 * @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->skipClassesPartials = $skipClassesPartials;
$this->skipStackFramesCount = $skipStackFramesCount; $this->skipStackFramesCount = $skipStackFramesCount;
} }
@ -77,9 +82,10 @@ class Introspection implements IHaveCallIntrospections
$i += $this->skipStackFramesCount; $i += $this->skipStackFramesCount;
return [ return [
'file' => isset($trace[$i - 1]['file']) ? basename($trace[$i - 1]['file']) : null, 'file' => isset($trace[$i - 1]['file']) ? basename($trace[$i - 1]['file']) : null,
'line' => $trace[$i - 1]['line'] ?? null, 'line' => $trace[$i - 1]['line'] ?? null,
'function' => $trace[$i]['function'] ?? null, 'function' => $trace[$i]['function'] ?? null,
'request-id' => $this->requestId,
]; ];
} }