mirror of
https://github.com/nextcloud/server.git
synced 2026-06-09 08:44:07 -04:00
Merge pull request #35970 from nextcloud/perf/noid/exception-serializer
This commit is contained in:
commit
8557c61389
4 changed files with 27 additions and 20 deletions
|
|
@ -59,21 +59,11 @@ use function strtr;
|
|||
* MonoLog is an example implementing this interface.
|
||||
*/
|
||||
class Log implements ILogger, IDataLogger {
|
||||
|
||||
/** @var IWriter */
|
||||
private $logger;
|
||||
|
||||
/** @var SystemConfig */
|
||||
private $config;
|
||||
|
||||
/** @var boolean|null cache the result of the log condition check for the request */
|
||||
private $logConditionSatisfied = null;
|
||||
|
||||
/** @var Normalizer */
|
||||
private $normalizer;
|
||||
|
||||
/** @var IRegistry */
|
||||
private $crashReporters;
|
||||
private IWriter $logger;
|
||||
private ?SystemConfig $config;
|
||||
private ?bool $logConditionSatisfied = null;
|
||||
private ?Normalizer $normalizer;
|
||||
private ?IRegistry $crashReporters;
|
||||
|
||||
/**
|
||||
* @param IWriter $logger The logger that should be used
|
||||
|
|
@ -81,7 +71,7 @@ class Log implements ILogger, IDataLogger {
|
|||
* @param Normalizer|null $normalizer
|
||||
* @param IRegistry|null $registry
|
||||
*/
|
||||
public function __construct(IWriter $logger, SystemConfig $config = null, $normalizer = null, IRegistry $registry = null) {
|
||||
public function __construct(IWriter $logger, SystemConfig $config = null, Normalizer $normalizer = null, IRegistry $registry = null) {
|
||||
// FIXME: Add this for backwards compatibility, should be fixed at some point probably
|
||||
if ($config === null) {
|
||||
$config = \OC::$server->getSystemConfig();
|
||||
|
|
@ -312,6 +302,11 @@ class Log implements ILogger, IDataLogger {
|
|||
$app = $context['app'] ?? 'no app in context';
|
||||
$level = $context['level'] ?? ILogger::ERROR;
|
||||
|
||||
$minLevel = $this->getLogLevel($context);
|
||||
if ($level < $minLevel && ($this->crashReporters === null || !$this->crashReporters->hasReporters())) {
|
||||
return;
|
||||
}
|
||||
|
||||
// if an error is raised before the autoloader is properly setup, we can't serialize exceptions
|
||||
try {
|
||||
$serializer = $this->getSerializer();
|
||||
|
|
@ -325,7 +320,6 @@ class Log implements ILogger, IDataLogger {
|
|||
$data = array_merge($serializer->serializeException($exception), $data);
|
||||
$data = $this->interpolateMessage($data, $context['message'] ?? '--', 'CustomMessage');
|
||||
|
||||
$minLevel = $this->getLogLevel($context);
|
||||
|
||||
array_walk($context, [$this->normalizer, 'format']);
|
||||
|
||||
|
|
|
|||
|
|
@ -223,13 +223,13 @@ class ExceptionSerializer {
|
|||
}
|
||||
|
||||
private function encodeTrace($trace) {
|
||||
$filteredTrace = $this->filterTrace($trace);
|
||||
return array_map(function (array $line) {
|
||||
$trace = array_map(function (array $line) {
|
||||
if (isset($line['args'])) {
|
||||
$line['args'] = array_map([$this, 'encodeArg'], $line['args']);
|
||||
}
|
||||
return $line;
|
||||
}, $filteredTrace);
|
||||
}, $trace);
|
||||
return $this->filterTrace($trace);
|
||||
}
|
||||
|
||||
private function encodeArg($arg, $nestingLevel = 5) {
|
||||
|
|
|
|||
|
|
@ -147,4 +147,8 @@ class Registry implements IRegistry {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function hasReporters(): bool {
|
||||
return !empty($this->lazyReporters) || !empty($this->reporters);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -81,4 +81,13 @@ interface IRegistry {
|
|||
* @since 17.0.0
|
||||
*/
|
||||
public function delegateMessage(string $message, array $context = []): void;
|
||||
|
||||
/**
|
||||
* Check if any reporter has been registered to delegate to
|
||||
*
|
||||
* @return bool
|
||||
* @deprecated use internally only
|
||||
* @since 26.0.0
|
||||
*/
|
||||
public function hasReporters(): bool;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue