mirror of
https://github.com/Seldaek/monolog.git
synced 2025-08-05 12:47:39 +02:00
Also add setBasePath to NormalizerFormatter/JsonFormatter
This commit is contained in:
@@ -31,6 +31,8 @@ class NormalizerFormatter implements FormatterInterface
|
|||||||
|
|
||||||
private int $jsonEncodeOptions = Utils::DEFAULT_JSON_FLAGS;
|
private int $jsonEncodeOptions = Utils::DEFAULT_JSON_FLAGS;
|
||||||
|
|
||||||
|
protected string $basePath = '';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format
|
* @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format
|
||||||
* @throws \RuntimeException If the function json_encode does not exist
|
* @throws \RuntimeException If the function json_encode does not exist
|
||||||
@@ -140,6 +142,21 @@ class NormalizerFormatter implements FormatterInterface
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setting a base path will hide the base path from exception and stack trace file names to shorten them
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function setBasePath(string $path = ''): self
|
||||||
|
{
|
||||||
|
if ($path !== '') {
|
||||||
|
$path = rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->basePath = $path;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provided as extension point
|
* Provided as extension point
|
||||||
*
|
*
|
||||||
@@ -247,11 +264,16 @@ class NormalizerFormatter implements FormatterInterface
|
|||||||
return (array) $e->jsonSerialize();
|
return (array) $e->jsonSerialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$file = $e->getFile();
|
||||||
|
if ($this->basePath !== '') {
|
||||||
|
$file = preg_replace('{^'.preg_quote($this->basePath).'}', '', $file);
|
||||||
|
}
|
||||||
|
|
||||||
$data = [
|
$data = [
|
||||||
'class' => Utils::getClass($e),
|
'class' => Utils::getClass($e),
|
||||||
'message' => $e->getMessage(),
|
'message' => $e->getMessage(),
|
||||||
'code' => (int) $e->getCode(),
|
'code' => (int) $e->getCode(),
|
||||||
'file' => $e->getFile().':'.$e->getLine(),
|
'file' => $file.':'.$e->getLine(),
|
||||||
];
|
];
|
||||||
|
|
||||||
if ($e instanceof \SoapFault) {
|
if ($e instanceof \SoapFault) {
|
||||||
@@ -275,7 +297,11 @@ class NormalizerFormatter implements FormatterInterface
|
|||||||
$trace = $e->getTrace();
|
$trace = $e->getTrace();
|
||||||
foreach ($trace as $frame) {
|
foreach ($trace as $frame) {
|
||||||
if (isset($frame['file'], $frame['line'])) {
|
if (isset($frame['file'], $frame['line'])) {
|
||||||
$data['trace'][] = $frame['file'].':'.$frame['line'];
|
$file = $frame['file'];
|
||||||
|
if ($this->basePath !== '') {
|
||||||
|
$file = preg_replace('{^'.preg_quote($this->basePath).'}', '', $file);
|
||||||
|
}
|
||||||
|
$data['trace'][] = $file.':'.$frame['line'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -118,6 +118,18 @@ class JsonFormatterTest extends TestCase
|
|||||||
$this->assertContextContainsFormattedException($formattedException, $message);
|
$this->assertContextContainsFormattedException($formattedException, $message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testBasePathWithException(): void
|
||||||
|
{
|
||||||
|
$formatter = new JsonFormatter();
|
||||||
|
$formatter->setBasePath(dirname(dirname(dirname(__DIR__))));
|
||||||
|
$exception = new \RuntimeException('Foo');
|
||||||
|
|
||||||
|
$message = $this->formatRecordWithExceptionInContext($formatter, $exception);
|
||||||
|
|
||||||
|
$parsed = json_decode($message, true);
|
||||||
|
self::assertSame('tests/Monolog/Formatter/JsonFormatterTest.php:' . (__LINE__ - 5), $parsed['context']['exception']['file']);
|
||||||
|
}
|
||||||
|
|
||||||
public function testDefFormatWithPreviousException()
|
public function testDefFormatWithPreviousException()
|
||||||
{
|
{
|
||||||
$formatter = new JsonFormatter();
|
$formatter = new JsonFormatter();
|
||||||
|
@@ -81,6 +81,20 @@ class NormalizerFormatterTest extends TestCase
|
|||||||
], $formatted);
|
], $formatted);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testFormatExceptionWithBasePath(): void
|
||||||
|
{
|
||||||
|
$formatter = new NormalizerFormatter('Y-m-d');
|
||||||
|
$formatter->setBasePath(dirname(dirname(dirname(__DIR__))));
|
||||||
|
$e = new \LogicException('bar');
|
||||||
|
$formatted = $formatter->normalizeValue([
|
||||||
|
'exception' => $e,
|
||||||
|
]);
|
||||||
|
|
||||||
|
self::assertSame('tests/Monolog/Formatter/NormalizerFormatterTest.php:' . (__LINE__ - 5), $formatted['exception']['file']);
|
||||||
|
self::assertStringStartsWith('vendor/phpunit/phpunit/src/Framework/TestCase.php:', $formatted['exception']['trace'][0]);
|
||||||
|
self::assertStringStartsWith('vendor/phpunit/phpunit/src/Framework/TestCase.php:', $formatted['exception']['trace'][1]);
|
||||||
|
}
|
||||||
|
|
||||||
public function testFormatSoapFaultException()
|
public function testFormatSoapFaultException()
|
||||||
{
|
{
|
||||||
if (!class_exists('SoapFault')) {
|
if (!class_exists('SoapFault')) {
|
||||||
|
Reference in New Issue
Block a user