diff --git a/src/Util/Logger/FriendicaProcessor.php b/src/Util/Logger/FriendicaProcessor.php index 21c6fcc031..8e45c228fd 100644 --- a/src/Util/Logger/FriendicaProcessor.php +++ b/src/Util/Logger/FriendicaProcessor.php @@ -17,22 +17,22 @@ class FriendicaProcessor implements ProcessorInterface private $skipStackFramesCount; + private $skipClassesPartials; + private $skipFunctions = [ 'call_user_func', 'call_user_func_array', ]; - private $skipFiles = [ - 'Logger.php' - ]; - /** * @param string|int $level The minimum logging level at which this Processor will be triggered + * @param array $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($level = Logger::DEBUG, $skipStackFramesCount = 0) + public function __construct($level = Logger::DEBUG, array $skipClassesPartials = array(), $skipStackFramesCount = 0) { $this->level = Logger::toMonologLevel($level); + $this->skipClassesPartials = array_merge(array('Monolog\\'), $skipClassesPartials); $this->skipStackFramesCount = $skipStackFramesCount; } @@ -47,13 +47,24 @@ class FriendicaProcessor implements ProcessorInterface $i = 1; - // Skip everything that we shouldn't display - while (in_array($trace[$i]['function'], $this->skipFunctions) || - !isset($trace[$i - 1]['file']) || - in_array(basename($trace[$i - 1]['file']), $this->skipFiles)) { - $i++; + while ($this->isTraceClassOrSkippedFunction($trace, $i)) { + if (isset($trace[$i]['class'])) { + foreach ($this->skipClassesPartials as $part) { + if (strpos($trace[$i]['class'], $part) !== false) { + $i++; + continue 2; + } + } + } elseif (in_array($trace[$i]['function'], $this->skipFunctions)) { + $i++; + continue; + } + + break; } + $i += $this->skipStackFramesCount; + // we should have the call source now $record['extra'] = array_merge( $record['extra'], @@ -66,4 +77,13 @@ class FriendicaProcessor implements ProcessorInterface return $record; } + + private function isTraceClassOrSkippedFunction(array $trace, $index) + { + if (!isset($trace[$index])) { + return false; + } + + return isset($trace[$index]['class']) || in_array($trace[$index]['function'], $this->skipFunctions); + } } diff --git a/src/Util/LoggerFactory.php b/src/Util/LoggerFactory.php index 88b6fe8c81..cca8833751 100644 --- a/src/Util/LoggerFactory.php +++ b/src/Util/LoggerFactory.php @@ -28,7 +28,8 @@ class LoggerFactory $logger = new Monolog\Logger($channel); $logger->pushProcessor(new Monolog\Processor\PsrLogMessageProcessor()); $logger->pushProcessor(new Monolog\Processor\ProcessIdProcessor()); - $logger->pushProcessor(new FriendicaProcessor(LogLevel::DEBUG, 1)); + $logger->pushProcessor(new Monolog\Processor\UidProcessor()); + $logger->pushProcessor(new FriendicaProcessor(LogLevel::DEBUG, ['Friendica\Core\Logger'])); return $logger; } @@ -51,7 +52,8 @@ class LoggerFactory $logger = new Monolog\Logger($channel); $logger->pushProcessor(new Monolog\Processor\PsrLogMessageProcessor()); $logger->pushProcessor(new Monolog\Processor\ProcessIdProcessor()); - $logger->pushProcessor(new FriendicaProcessor(LogLevel::DEBUG, 1)); + $logger->pushProcessor(new Monolog\Processor\UidProcessor()); + $logger->pushProcessor(new FriendicaProcessor(LogLevel::DEBUG, ['Friendica\Core\Logger'])); $logger->pushHandler(new FriendicaDevelopHandler($developerIp));