X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fdebug%2Flogger%2Fmonolog%2FLogstashFormatter.php;h=09ed7555dbfd570d0f8eeb4012cf7e848fe0c8b5;hb=c27085dd72271966b4b8de29e52878c7fccef1bf;hp=553cbf61c4add2235a49f872e4847f24df127436;hpb=8dfae8aecebbce32861aaf74133baeaee24e56e0;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/debug/logger/monolog/LogstashFormatter.php b/includes/debug/logger/monolog/LogstashFormatter.php index 553cbf61c4..09ed7555db 100644 --- a/includes/debug/logger/monolog/LogstashFormatter.php +++ b/includes/debug/logger/monolog/LogstashFormatter.php @@ -6,6 +6,7 @@ namespace MediaWiki\Logger\Monolog; * LogstashFormatter squashes the base message array and the context and extras subarrays into one. * This can result in unfortunately named context fields overwriting other data (T145133). * This class modifies the standard LogstashFormatter to rename such fields and flag the message. + * Also changes exception JSON-ification which is done poorly by the standard class. * * Compatible with Monolog 1.x only. * @@ -80,4 +81,31 @@ class LogstashFormatter extends \Monolog\Formatter\LogstashFormatter { } return $fields; } + + /** + * Use a more user-friendly trace format than NormalizerFormatter + * @param \Exception|\Throwable $e + * @return array + */ + protected function normalizeException( $e ) { + if ( !$e instanceof \Exception && !$e instanceof \Throwable ) { + throw new \InvalidArgumentException( 'Exception/Throwable expected, got ' + . gettype( $e ) . ' / ' . get_class( $e ) ); + } + + $data = [ + 'class' => get_class( $e ), + 'message' => $e->getMessage(), + 'code' => $e->getCode(), + 'file' => $e->getFile() . ':' . $e->getLine(), + 'trace' => \MWExceptionHandler::getRedactedTraceAsString( $e ), + ]; + + $previous = $e->getPrevious(); + if ( $previous ) { + $data['previous'] = $this->normalizeException( $previous ); + } + + return $data; + } }