From a5e12f53e82807c79c7c1976703d1f4ed3fbac8a Mon Sep 17 00:00:00 2001 From: Philipp Holzer Date: Mon, 28 Jan 2019 11:21:48 +0100 Subject: [PATCH 1/5] Logger Unique ID --- src/Util/Logger/FriendicaProcessor.php | 40 +++++++++++++++++++------- src/Util/LoggerFactory.php | 6 ++-- 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/src/Util/Logger/FriendicaProcessor.php b/src/Util/Logger/FriendicaProcessor.php index 21c6fcc03..8e45c228f 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 88b6fe8c8..cca883375 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)); From 88e2cc9fa26d72d54319f04b4678b0792fa4dfc1 Mon Sep 17 00:00:00 2001 From: Philipp Holzer Date: Mon, 28 Jan 2019 11:35:08 +0100 Subject: [PATCH 2/5] removing array prefix (compatibility) --- src/Util/Logger/FriendicaProcessor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Util/Logger/FriendicaProcessor.php b/src/Util/Logger/FriendicaProcessor.php index 8e45c228f..627f628b8 100644 --- a/src/Util/Logger/FriendicaProcessor.php +++ b/src/Util/Logger/FriendicaProcessor.php @@ -29,7 +29,7 @@ class FriendicaProcessor implements ProcessorInterface * @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, array $skipClassesPartials = array(), $skipStackFramesCount = 0) + public function __construct($level = Logger::DEBUG, $skipClassesPartials = array(), $skipStackFramesCount = 0) { $this->level = Logger::toMonologLevel($level); $this->skipClassesPartials = array_merge(array('Monolog\\'), $skipClassesPartials); From 9fe1da5f94bc2a234e64bb47c6fe3e66f0acf9ce Mon Sep 17 00:00:00 2001 From: Philipp Holzer Date: Mon, 28 Jan 2019 12:35:14 +0100 Subject: [PATCH 3/5] Double backslash --- src/Util/LoggerFactory.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Util/LoggerFactory.php b/src/Util/LoggerFactory.php index cca883375..961585ebf 100644 --- a/src/Util/LoggerFactory.php +++ b/src/Util/LoggerFactory.php @@ -29,7 +29,7 @@ class LoggerFactory $logger->pushProcessor(new Monolog\Processor\PsrLogMessageProcessor()); $logger->pushProcessor(new Monolog\Processor\ProcessIdProcessor()); $logger->pushProcessor(new Monolog\Processor\UidProcessor()); - $logger->pushProcessor(new FriendicaProcessor(LogLevel::DEBUG, ['Friendica\Core\Logger'])); + $logger->pushProcessor(new FriendicaProcessor(LogLevel::DEBUG, ['Friendica\\Core\\Logger'])); return $logger; } @@ -53,7 +53,7 @@ class LoggerFactory $logger->pushProcessor(new Monolog\Processor\PsrLogMessageProcessor()); $logger->pushProcessor(new Monolog\Processor\ProcessIdProcessor()); $logger->pushProcessor(new Monolog\Processor\UidProcessor()); - $logger->pushProcessor(new FriendicaProcessor(LogLevel::DEBUG, ['Friendica\Core\Logger'])); + $logger->pushProcessor(new FriendicaProcessor(LogLevel::DEBUG, ['Friendica\\Core\\Logger'])); $logger->pushHandler(new FriendicaDevelopHandler($developerIp)); From 26af96f31aee405d2f0eaa6723a1c15d246561e2 Mon Sep 17 00:00:00 2001 From: Philipp Holzer Date: Mon, 28 Jan 2019 18:26:35 +0100 Subject: [PATCH 4/5] improving code --- src/Util/Logger/FriendicaProcessor.php | 33 +++++++++++++++----------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/Util/Logger/FriendicaProcessor.php b/src/Util/Logger/FriendicaProcessor.php index 627f628b8..9f52a6f12 100644 --- a/src/Util/Logger/FriendicaProcessor.php +++ b/src/Util/Logger/FriendicaProcessor.php @@ -48,19 +48,7 @@ class FriendicaProcessor implements ProcessorInterface $i = 1; 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++; } $i += $this->skipStackFramesCount; @@ -78,12 +66,29 @@ class FriendicaProcessor implements ProcessorInterface return $record; } + /** + * 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 + * @return bool True if the class or function should get skipped, otherwise false + */ private function isTraceClassOrSkippedFunction(array $trace, $index) { if (!isset($trace[$index])) { return false; } - return isset($trace[$index]['class']) || in_array($trace[$index]['function'], $this->skipFunctions); + if (isset($trace[$index]['class'])) { + foreach ($this->skipClassesPartials as $part) { + if (strpos($trace[$index]['class'], $part) !== false) { + return true; + } + } + } elseif (in_array($trace[$index]['function'], $this->skipFunctions)) { + return true; + } + + return false; } } From d7e35b5802cdb66241778de82bb1061417008cf0 Mon Sep 17 00:00:00 2001 From: Philipp Holzer Date: Mon, 28 Jan 2019 18:41:29 +0100 Subject: [PATCH 5/5] Making the processor name more explicit --- ...icaProcessor.php => FriendicaIntrospectionProcessor.php} | 2 +- src/Util/LoggerFactory.php | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) rename src/Util/Logger/{FriendicaProcessor.php => FriendicaIntrospectionProcessor.php} (97%) diff --git a/src/Util/Logger/FriendicaProcessor.php b/src/Util/Logger/FriendicaIntrospectionProcessor.php similarity index 97% rename from src/Util/Logger/FriendicaProcessor.php rename to src/Util/Logger/FriendicaIntrospectionProcessor.php index 9f52a6f12..aa3933a21 100644 --- a/src/Util/Logger/FriendicaProcessor.php +++ b/src/Util/Logger/FriendicaIntrospectionProcessor.php @@ -11,7 +11,7 @@ use Monolog\Processor\ProcessorInterface; * Based on the class IntrospectionProcessor without the "class" information * @see IntrospectionProcessor */ -class FriendicaProcessor implements ProcessorInterface +class FriendicaIntrospectionProcessor implements ProcessorInterface { private $level; diff --git a/src/Util/LoggerFactory.php b/src/Util/LoggerFactory.php index 961585ebf..4d3a28716 100644 --- a/src/Util/LoggerFactory.php +++ b/src/Util/LoggerFactory.php @@ -4,7 +4,7 @@ namespace Friendica\Util; use Friendica\Network\HTTPException\InternalServerErrorException; use Friendica\Util\Logger\FriendicaDevelopHandler; -use Friendica\Util\Logger\FriendicaProcessor; +use Friendica\Util\Logger\FriendicaIntrospectionProcessor; use Monolog; use Psr\Log\LoggerInterface; use Psr\Log\LogLevel; @@ -29,7 +29,7 @@ class LoggerFactory $logger->pushProcessor(new Monolog\Processor\PsrLogMessageProcessor()); $logger->pushProcessor(new Monolog\Processor\ProcessIdProcessor()); $logger->pushProcessor(new Monolog\Processor\UidProcessor()); - $logger->pushProcessor(new FriendicaProcessor(LogLevel::DEBUG, ['Friendica\\Core\\Logger'])); + $logger->pushProcessor(new FriendicaIntrospectionProcessor(LogLevel::DEBUG, ['Friendica\\Core\\Logger'])); return $logger; } @@ -53,7 +53,7 @@ class LoggerFactory $logger->pushProcessor(new Monolog\Processor\PsrLogMessageProcessor()); $logger->pushProcessor(new Monolog\Processor\ProcessIdProcessor()); $logger->pushProcessor(new Monolog\Processor\UidProcessor()); - $logger->pushProcessor(new FriendicaProcessor(LogLevel::DEBUG, ['Friendica\\Core\\Logger'])); + $logger->pushProcessor(new FriendicaIntrospectionProcessor(LogLevel::DEBUG, ['Friendica\\Core\\Logger'])); $logger->pushHandler(new FriendicaDevelopHandler($developerIp));