namespace Friendica\App;
use Friendica\Core\Config\Capability\IManageConfigValues;
+use Friendica\Core\System;
/**
* Container for the whole 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
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);
}
/**
namespace Friendica\Core\Logger\Util;
+use Friendica\App\Request;
use Friendica\Core\Logger\Capabilities\IHaveCallIntrospections;
/**
*/
class Introspection implements IHaveCallIntrospections
{
+ /** @var string */
+ private $requestId;
+
/** @var int */
private $skipStackFramesCount;
* @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;
}
$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,
];
}