From 4a4f0f0e169f09e495c79025a38381c0a139d1e6 Mon Sep 17 00:00:00 2001 From: maxxedev <5051664+maxxedev@users.noreply.github.com> Date: Sat, 17 Aug 2024 23:01:22 -0700 Subject: [PATCH] Make it possible to pretty print throwables as array of strings. fixes #1042 --- README.md | 13 ++++++++++ .../logstash/logback/LogstashFormatter.java | 8 ++++++ .../loggingevent/StackTraceJsonProvider.java | 25 ++++++++++++++++-- .../PrettyPrintingJsonGeneratorDecorator.java | 9 +++++++ .../logback/encoder/LogstashEncoder.java | 8 ++++++ .../StackTraceJsonProviderTest.java | 20 ++++++++++++++ ...ttyPrintingJsonGeneratorDecoratorTest.java | 26 +++++++++++++++++++ 7 files changed, 107 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 11ff793a..070ad670 100644 --- a/README.md +++ b/README.md @@ -1568,6 +1568,18 @@ For example: See the [net.logstash.logback.decorate](/src/main/java/net/logstash/logback/decorate) package and sub-packages for other decorators. +If you prefer pretty printing for easier interactive viewing of (error) logs, you +may also prefer to output throwable as json array of strings where each string +is a stacktrace line: + +```xml + + + true + true + +``` + ### Registering Jackson Modules By default, Jackson modules are dynamically registered via @@ -2766,6 +2778,7 @@ The provider name is the xml element name to use when configuring. Each provider diff --git a/src/main/java/net/logstash/logback/LogstashFormatter.java b/src/main/java/net/logstash/logback/LogstashFormatter.java index 93a1f419..bf5ccfc0 100644 --- a/src/main/java/net/logstash/logback/LogstashFormatter.java +++ b/src/main/java/net/logstash/logback/LogstashFormatter.java @@ -396,6 +396,14 @@ public void setThrowableConverter(ThrowableHandlingConverter throwableConverter) this.stackTraceProvider.setThrowableConverter(throwableConverter); } + public boolean isOutputThrowableAsArray() { + return this.stackTraceProvider.isOutputThrowableAsArray(); + } + + public void setOutputThrowableAsArray(boolean outputAsArray) { + this.stackTraceProvider.setOutputThrowableAsArray(outputAsArray); + } + public String getVersion() { return this.versionProvider.getVersion(); } diff --git a/src/main/java/net/logstash/logback/composite/loggingevent/StackTraceJsonProvider.java b/src/main/java/net/logstash/logback/composite/loggingevent/StackTraceJsonProvider.java index 094cbb17..ba098925 100644 --- a/src/main/java/net/logstash/logback/composite/loggingevent/StackTraceJsonProvider.java +++ b/src/main/java/net/logstash/logback/composite/loggingevent/StackTraceJsonProvider.java @@ -32,6 +32,12 @@ public class StackTraceJsonProvider extends AbstractFieldJsonProvider