Skip to content

Commit b273366

Browse files
builderyapro
authored andcommitted
devMode improved
1 parent ab3c161 commit b273366

File tree

1 file changed

+32
-15
lines changed

1 file changed

+32
-15
lines changed

src/Handler/JsonToStdErrHandler.php

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use Symfony\Component\VarDumper\Dumper\AbstractDumper;
1414
use Symfony\Component\VarDumper\Dumper\CliDumper;
1515
use Symfony\Component\VarDumper\Dumper\ContextualizedDumper;
16+
use Throwable;
1617
use YaPro\MonologExt\Processor\AddStackTraceOfCallPlaceProcessor;
1718
use YaPro\MonologExt\VarHelper;
1819
use function is_numeric;
@@ -51,6 +52,7 @@ class JsonToStdErrHandler extends AbstractProcessingHandler
5152
private int $maxRecordLength = self::MAX_RECORD_LENGTH_DEFAULT;
5253

5354
private VarCloner $varCloner;
55+
private CliDumper $varDumper;
5456

5557
public function __construct(int $maxRecordLength = 0) {
5658
parent::__construct();
@@ -115,6 +117,25 @@ public function handle(array $record): bool
115117
return false;
116118
}
117119

120+
public function getDebugInfo(string $prefix, $objectOrArray, int $level = 0): string
121+
{
122+
// сначала печатаем примитивные типы до уровня 3, а затем все остальные в виде дампов:
123+
if ($level === 3) {
124+
return $prefix.' : ' .$this->dump($objectOrArray, 1) . PHP_EOL;
125+
}
126+
$result = '';
127+
is_array($objectOrArray) && asort($objectOrArray);
128+
foreach ($objectOrArray as $key => $value) {
129+
$fieldName = $prefix === '' ? $key : $prefix.'.'. $key;
130+
if (is_scalar($value) || is_null($value)) {
131+
$result .= trim($fieldName .' : ' . $value) . PHP_EOL;
132+
} else {
133+
$result .= $this->getDebugInfo($fieldName, $value, $level + 1);
134+
}
135+
}
136+
return $result;
137+
}
138+
118139
/**
119140
* @throws JsonException
120141
*/
@@ -126,24 +147,20 @@ public function write(array $record): void
126147

127148
$result .= $record['message'] . PHP_EOL;
128149
unset($record['message']);
129-
150+
130151
$stackTraceOfCallPlaceProcessor = new AddStackTraceOfCallPlaceProcessor();
131152
$trace = (new Exception())->getTrace();
132153
$stackTraceBeforeMonolog = $stackTraceOfCallPlaceProcessor->getStackTraceBeforeMonolog($trace);
133154
$callPlace = reset($stackTraceBeforeMonolog);
134155
$result .= 'The log entry has been wrote by ' . ($callPlace['file'] ?? '') . ':' . ($callPlace['line'] ?? '') . PHP_EOL;
135-
136-
foreach ($record['context'] as $key => $value) {
137-
$result .= trim($key .' : ' . $this->dump($value)) . PHP_EOL;
138-
}
139-
unset($record['context']);
140-
141-
foreach ($record as $key => $value) {
142-
$result .= trim($key .' : ' . $this->dump($value)) . PHP_EOL;
143-
}
156+
157+
$result .= $this->getDebugInfo('', $record);
144158
// $message .= json_encode($this->varHelper->dump($record), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT);
145-
fwrite($this->stderr, $result . PHP_EOL);
146-
$this->writeToStdErr($result);
159+
if (PHP_SAPI === 'fpm-fcgi') {
160+
echo '<pre>'.$result;
161+
} else {
162+
$this->writeToStdErr($result);
163+
}
147164
exit(123);
148165
};
149166
$result = $this->getMessage($record);
@@ -193,7 +210,7 @@ public function dumpRecordDataOnTheLevel(array $record, $maxLevel, $currentLevel
193210
return $record;
194211
}
195212

196-
public function reduceRecordDataOnTheLevel(array &$record, $maxLevel, $currentLevel = 1, &$changeableRecord)
213+
public function reduceRecordDataOnTheLevel(array &$record, $maxLevel, $currentLevel = 1)
197214
{
198215
if ($currentLevel === $maxLevel) {
199216
$reversed = array_reverse($record, true);
@@ -207,7 +224,7 @@ public function reduceRecordDataOnTheLevel(array &$record, $maxLevel, $currentLe
207224
} else {
208225
foreach ($record as $key => $value) {
209226
if (is_iterable($value)) {
210-
$record[$key] = $this->reduceRecordDataOnTheLevel($value, $maxLevel, $currentLevel++, $changeableRecord);
227+
$record[$key] = $this->reduceRecordDataOnTheLevel($value, $maxLevel, $currentLevel++);
211228
} else {
212229
$record[$key] = $value;
213230
}
@@ -235,7 +252,7 @@ public function getMessage(array $record): string
235252
// попробуем не укорачивать глобально по уровню, а попробуем укоротить уменьшая даннные на уровне $maxDumpLevel+1
236253
// Для этого сначала задампим данные на уровне $maxDumpLevel+1, а потом будем отбрасывать значения
237254
$dumpedRecord = $this->dumpRecordDataOnTheLevel($record, $maxDumpLevel+1);
238-
$this->reduceRecordDataOnTheLevel($dumpedRecord, $maxDumpLevel+1, 1, $dumpedRecord);
255+
$this->reduceRecordDataOnTheLevel($dumpedRecord, $maxDumpLevel+1, 1);
239256

240257
return $this->getJson($dumpedRecord);
241258
/*

0 commit comments

Comments
 (0)