<?php
/**
- * @copyright Copyright (C) 2010-2022, the Friendica project
+ * @copyright Copyright (C) 2010-2023, the Friendica project
*
* @license GNU AGPL version 3 or any later version
*
namespace Friendica\Core\Logger\Util;
-use Friendica\Core\Logger\Capabilities\IHaveCallIntrospections;
+use Friendica\App\Request;
+use Friendica\Core\Logger\Capability\IHaveCallIntrospections;
/**
* Get Introspection information about the current call
*/
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 = 1;
- while ($this->isTraceClassOrSkippedFunction($trace, $i)) {
+ while ($this->isTraceClassOrSkippedFunction($trace[$i] ?? [])) {
$i++;
}
$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,
];
}
/**
* Checks if the current trace class or function has to be skipped
*
- * @param array $trace The current trace array
- * @param int $index The index of the current hierarchy level
+ * @param array $traceItem The current trace item
*
* @return bool True if the class or function should get skipped, otherwise false
*/
- private function isTraceClassOrSkippedFunction(array $trace, int $index): bool
+ private function isTraceClassOrSkippedFunction(array $traceItem): bool
{
- if (!isset($trace[$index])) {
+ if (!$traceItem) {
return false;
}
- if (isset($trace[$index]['class'])) {
+ if (isset($traceItem['class'])) {
foreach ($this->skipClassesPartials as $part) {
- if (strpos($trace[$index]['class'], $part) !== false) {
+ if (strpos($traceItem['class'], $part) === 0) {
return true;
}
}
- } elseif (in_array($trace[$index]['function'], $this->skipFunctions)) {
+ } elseif (in_array($traceItem['function'], $this->skipFunctions)) {
return true;
}