aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/Log
diff options
context:
space:
mode:
authorRoeland Jago Douma <roeland@famdouma.nl>2020-12-29 10:50:53 +0100
committerRoeland Jago Douma <roeland@famdouma.nl>2020-12-29 10:50:53 +0100
commit179de95f8108fde9271637fab45fe648ff25771e (patch)
tree7c74c3de4499e07ec513e7700a48cd2f8218de43 /lib/private/Log
parent083f3d23737b99fafec87c64df99e9c09cde71c7 (diff)
downloadnextcloud-server-179de95f8108fde9271637fab45fe648ff25771e.tar.gz
nextcloud-server-179de95f8108fde9271637fab45fe648ff25771e.zip
Avoid huge exception argument logging
In some cases it might happen that you have an argument that deep down somewhere has an array with a lot of entries (think thousands). Now before we would just happily print them all. Which would fill the log. Now it will just print the first 5. And add a line that there are N more. If you are on debug level we will still print them all. Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
Diffstat (limited to 'lib/private/Log')
-rw-r--r--lib/private/Log/ExceptionSerializer.php24
1 files changed, 21 insertions, 3 deletions
diff --git a/lib/private/Log/ExceptionSerializer.php b/lib/private/Log/ExceptionSerializer.php
index 0cb68f08914..ae3e6ba100d 100644
--- a/lib/private/Log/ExceptionSerializer.php
+++ b/lib/private/Log/ExceptionSerializer.php
@@ -33,6 +33,7 @@ use OC\Core\Controller\SetupController;
use OC\HintException;
use OC\Security\IdentityProof\Key;
use OC\Setup;
+use OC\SystemConfig;
class ExceptionSerializer {
public const methodsWithSensitiveParameters = [
@@ -92,6 +93,13 @@ class ExceptionSerializer {
'imagecreatefromstring',
];
+ /** @var SystemConfig */
+ private $systemConfig;
+
+ public function __construct(SystemConfig $systemConfig) {
+ $this->systemConfig = $systemConfig;
+ }
+
public const methodsWithSensitiveParametersByClass = [
SetupController::class => [
'run',
@@ -163,11 +171,21 @@ class ExceptionSerializer {
$data = get_object_vars($arg);
$data['__class__'] = get_class($arg);
return array_map([$this, 'encodeArg'], $data);
- } elseif (is_array($arg)) {
+ }
+
+ if (is_array($arg)) {
+ // Only log the first 5 elements of an array unless we are on debug
+ if ((int)$this->systemConfig->getValue('loglevel', 2) !== 0) {
+ $elemCount = count($arg);
+ if ($elemCount > 5) {
+ $arg = array_slice($arg, 0, 5);
+ $arg[] = 'And ' . ($elemCount - 5) . ' more entries, set log level to debug to see all entries';
+ }
+ }
return array_map([$this, 'encodeArg'], $arg);
- } else {
- return $arg;
}
+
+ return $arg;
}
public function serializeException(\Throwable $exception) {