1
0
mirror of https://github.com/Seldaek/monolog.git synced 2025-08-01 19:00:20 +02:00

Max depth formatter (#1633)

This commit is contained in:
Geoffrey
2022-03-13 21:20:19 +01:00
committed by GitHub
parent 895066e602
commit 09769e4238
2 changed files with 28 additions and 7 deletions

View File

@@ -38,9 +38,11 @@ class JsonFormatter extends NormalizerFormatter
/** /**
* @param int $batchMode * @param int $batchMode
* @param bool $appendNewline * @param bool $appendNewline
* @param int $maxDepth
*/ */
public function __construct($batchMode = self::BATCH_MODE_JSON, $appendNewline = true) public function __construct($batchMode = self::BATCH_MODE_JSON, $appendNewline = true, $maxDepth = 9)
{ {
parent::__construct(null, $maxDepth);
$this->batchMode = $batchMode; $this->batchMode = $batchMode;
$this->appendNewline = $appendNewline; $this->appendNewline = $appendNewline;
} }
@@ -141,8 +143,8 @@ class JsonFormatter extends NormalizerFormatter
*/ */
protected function normalize($data, $depth = 0) protected function normalize($data, $depth = 0)
{ {
if ($depth > 9) { if ($depth > $this->maxDepth) {
return 'Over 9 levels deep, aborting normalization'; return 'Over '.$this->maxDepth.' levels deep, aborting normalization';
} }
if (is_array($data)) { if (is_array($data)) {

View File

@@ -24,13 +24,16 @@ class NormalizerFormatter implements FormatterInterface
const SIMPLE_DATE = "Y-m-d H:i:s"; const SIMPLE_DATE = "Y-m-d H:i:s";
protected $dateFormat; protected $dateFormat;
protected $maxDepth;
/** /**
* @param string $dateFormat The format of the timestamp: one supported by DateTime::format * @param string $dateFormat The format of the timestamp: one supported by DateTime::format
* @param int $maxDepth
*/ */
public function __construct($dateFormat = null) public function __construct($dateFormat = null, $maxDepth = 9)
{ {
$this->dateFormat = $dateFormat ?: static::SIMPLE_DATE; $this->dateFormat = $dateFormat ?: static::SIMPLE_DATE;
$this->maxDepth = $maxDepth;
if (!function_exists('json_encode')) { if (!function_exists('json_encode')) {
throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s NormalizerFormatter'); throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s NormalizerFormatter');
} }
@@ -56,10 +59,26 @@ class NormalizerFormatter implements FormatterInterface
return $records; return $records;
} }
/**
* @return int
*/
public function getMaxDepth()
{
return $this->maxDepth;
}
/**
* @param int $maxDepth
*/
public function setMaxDepth($maxDepth)
{
$this->maxDepth = $maxDepth;
}
protected function normalize($data, $depth = 0) protected function normalize($data, $depth = 0)
{ {
if ($depth > 9) { if ($depth > $this->maxDepth) {
return 'Over 9 levels deep, aborting normalization'; return 'Over '.$this->maxDepth.' levels deep, aborting normalization';
} }
if (null === $data || is_scalar($data)) { if (null === $data || is_scalar($data)) {
@@ -177,4 +196,4 @@ class NormalizerFormatter implements FormatterInterface
{ {
return Utils::jsonEncode($data, null, $ignoreErrors); return Utils::jsonEncode($data, null, $ignoreErrors);
} }
} }