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
- fieldName - Output field name (stack_trace)
- throwableConverter - The ThrowableHandlingConverter to use to format the stacktrace (stack_trace)
+ - outputThrowableAsArray - Output throwable as json array of strings where each string is a stacktrace line
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