Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,6 @@ public class ThrowableProxyRendererTest {
@Test
public void test_formatExtendedStackTraceTo() {
ThrowableProxyRenderer.formatExtendedStackTraceTo(new ThrowableProxy(), new StringBuilder(), new ArrayList<>(),
new PlainTextRenderer(), "", System.lineSeparator());
new PlainTextRenderer(), "", System.lineSeparator(), Integer.MAX_VALUE);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,52 @@
import static org.junit.jupiter.api.Assertions.*;

public class ExtendedThrowablePatternConverterTest {
/**
* TODO: Needs better a better exception? NumberFormatException is NOT helpful.
*/
@Test
public void testBadShortOption() {
final String[] options = { "short.UNKNOWN" };
assertThrows(NumberFormatException.class, () -> ThrowablePatternConverter.newInstance(null, options));
}

@Test
public void testShortStacktrace() {
final String[] options = { "short" };
final ExtendedThrowablePatternConverter converter = ExtendedThrowablePatternConverter.newInstance(null, options);
final Throwable parent = new IllegalArgumentException("IllegalArgument", new NullPointerException());
final LogEvent event = Log4jLogEvent.newBuilder() //
.setLoggerName("testLogger") //
.setLoggerFqcn(this.getClass().getName()) //
.setLevel(Level.DEBUG) //
.setMessage(new SimpleMessage("test exception")) //
.setThrown(parent).build();
final StringBuilder sb = new StringBuilder();
converter.format(event, sb);
final String result = sb.toString();
String[] lines = result.split(Strings.LINE_SEPARATOR);
assertEquals(2, lines.length, "Invalid number of lines in stacktrace");
assertFalse(result.contains("NullPointerException"), "Exception should not be visible");
}

@Test
public void testLenghLimitedStacktrace() {
final String[] options = { "10" };
final ExtendedThrowablePatternConverter converter = ExtendedThrowablePatternConverter.newInstance(null, options);
final Throwable parent = new IllegalArgumentException("IllegalArgument", new NullPointerException());
final LogEvent event = Log4jLogEvent.newBuilder() //
.setLoggerName("testLogger") //
.setLoggerFqcn(this.getClass().getName()) //
.setLevel(Level.DEBUG) //
.setMessage(new SimpleMessage("test exception")) //
.setThrown(parent).build();
final StringBuilder sb = new StringBuilder();
converter.format(event, sb);
final String result = sb.toString();
String[] lines = result.split(Strings.LINE_SEPARATOR);
assertEquals(10, lines.length, "Invalid number of lines in stacktrace");
assertFalse(result.contains("NullPointerException"), "Exception should not be visible");
}

@Test
public void testSuffixFromNormalPattern() {
Expand Down Expand Up @@ -93,11 +139,11 @@ public void testSuffixWillIgnoreThrowablePattern() {
}

@Test
public void testDeserializedLogEventWithThrowableProxyButNoThrowable() {
final ExtendedThrowablePatternConverter converter = ExtendedThrowablePatternConverter.newInstance(null, null);
final Throwable originalThrowable = new Exception("something bad happened");
final ThrowableProxy throwableProxy = new ThrowableProxy(originalThrowable);
final Throwable deserializedThrowable = null;
public void testDeserializedLogEventWithThrowableProxyButNoThrowable() {
final ExtendedThrowablePatternConverter converter = ExtendedThrowablePatternConverter.newInstance(null, null);
final Throwable originalThrowable = new Exception("something bad happened");
final ThrowableProxy throwableProxy = new ThrowableProxy(originalThrowable);
final Throwable deserializedThrowable = null;
final Log4jLogEvent event = Log4jLogEvent.newBuilder() //
.setLoggerName("testLogger") //
.setLoggerFqcn(this.getClass().getName()) //
Expand All @@ -106,12 +152,12 @@ public void testDeserializedLogEventWithThrowableProxyButNoThrowable() {
.setThrown(deserializedThrowable) //
.setThrownProxy(throwableProxy) //
.setTimeMillis(0).build();
final StringBuilder sb = new StringBuilder();
converter.format(event, sb);
final String result = sb.toString();
assertTrue(result.contains(originalThrowable.getMessage()), result);
assertTrue(result.contains(originalThrowable.getStackTrace()[0].getMethodName()), result);
}
final StringBuilder sb = new StringBuilder();
converter.format(event, sb);
final String result = sb.toString();
assertTrue(result.contains(originalThrowable.getMessage()), result);
assertTrue(result.contains(originalThrowable.getStackTrace()[0].getMethodName()), result);
}

@Test
public void testFiltering() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ public boolean equals(final Object obj) {

/**
* Formats the specified Throwable.
* @param sb StringBuilder to contain the formatted Throwable.
* @param sb StringBuilder to contain the formatted Throwable.
* @param cause The Throwable to format.
* @param suffix
*/
Expand All @@ -186,7 +186,7 @@ public void formatWrapper(final StringBuilder sb, final ThrowableProxy cause, fi

/**
* Formats the specified Throwable.
* @param sb StringBuilder to contain the formatted Throwable.
* @param sb StringBuilder to contain the formatted Throwable.
* @param cause The Throwable to format.
* @param ignorePackages The List of packages to be suppressed from the trace.
* @param suffix
Expand All @@ -207,7 +207,7 @@ public void formatWrapper(final StringBuilder sb, final ThrowableProxy cause, fi
@SuppressWarnings("ThrowableResultOfMethodCallIgnored")
public void formatWrapper(final StringBuilder sb, final ThrowableProxy cause, final List<String> ignorePackages,
final TextRenderer textRenderer, final String suffix) {
formatWrapper(sb, cause, ignorePackages, textRenderer, suffix, EOL_STR);
this.formatWrapper(sb, cause, ignorePackages, textRenderer, suffix, EOL_STR, Integer.MAX_VALUE);
}

/**
Expand All @@ -222,7 +222,23 @@ public void formatWrapper(final StringBuilder sb, final ThrowableProxy cause, fi
@SuppressWarnings("ThrowableResultOfMethodCallIgnored")
public void formatWrapper(final StringBuilder sb, final ThrowableProxy cause, final List<String> ignorePackages,
final TextRenderer textRenderer, final String suffix, final String lineSeparator) {
ThrowableProxyRenderer.formatWrapper(sb, cause, ignorePackages, textRenderer, suffix, lineSeparator);
this.formatWrapper(sb, cause, ignorePackages, textRenderer, suffix, lineSeparator, Integer.MAX_VALUE);
}

/**
* Formats the specified Throwable.
* @param sb StringBuilder to contain the formatted Throwable.
* @param cause The Throwable to format.
* @param ignorePackages The List of packages to be suppressed from the stack trace.
* @param textRenderer The text renderer.
* @param suffix Append this to the end of each stack frame.
* @param lineSeparator The end-of-line separator.
* @param lines The number of lines from the stack trace to write.
*/
@SuppressWarnings("ThrowableResultOfMethodCallIgnored")
public void formatWrapper(final StringBuilder sb, final ThrowableProxy cause, final List<String> ignorePackages,
final TextRenderer textRenderer, final String suffix, final String lineSeparator, final int lines) {
ThrowableProxyRenderer.formatWrapper(sb, cause, ignorePackages, textRenderer, suffix, lineSeparator, lines);
}

public ThrowableProxy getCauseProxy() {
Expand All @@ -236,7 +252,7 @@ public ThrowableProxy getCauseProxy() {
* @param suffix
*/
public String getCauseStackTraceAsString(final String suffix) {
return this.getCauseStackTraceAsString(null, PlainTextRenderer.getInstance(), suffix, EOL_STR);
return this.getCauseStackTraceAsString(null, PlainTextRenderer.getInstance(), suffix, EOL_STR, Integer.MAX_VALUE);
}

/**
Expand All @@ -247,7 +263,7 @@ public String getCauseStackTraceAsString(final String suffix) {
* @return The formatted Throwable that caused this Throwable.
*/
public String getCauseStackTraceAsString(final List<String> packages, final String suffix) {
return getCauseStackTraceAsString(packages, PlainTextRenderer.getInstance(), suffix, EOL_STR);
return getCauseStackTraceAsString(packages, PlainTextRenderer.getInstance(), suffix, EOL_STR, Integer.MAX_VALUE);
}

/**
Expand All @@ -259,7 +275,7 @@ public String getCauseStackTraceAsString(final List<String> packages, final Stri
* @return The formatted Throwable that caused this Throwable.
*/
public String getCauseStackTraceAsString(final List<String> ignorePackages, final TextRenderer textRenderer, final String suffix) {
return getCauseStackTraceAsString(ignorePackages, textRenderer, suffix, EOL_STR);
return getCauseStackTraceAsString(ignorePackages, textRenderer, suffix, EOL_STR, Integer.MAX_VALUE);
}

/**
Expand All @@ -272,11 +288,39 @@ public String getCauseStackTraceAsString(final List<String> ignorePackages, fina
* @return The formatted Throwable that caused this Throwable.
*/
public String getCauseStackTraceAsString(final List<String> ignorePackages, final TextRenderer textRenderer, final String suffix, final String lineSeparator) {
return getCauseStackTraceAsString(ignorePackages, textRenderer, suffix, lineSeparator, Integer.MAX_VALUE);
}

/**
* Formats the Throwable that is the cause of this Throwable.
*
* @param ignorePackages The List of packages to be suppressed from the stack trace.
* @param textRenderer The text renderer.
* @param suffix Append this to the end of each stack frame.
* @param lineSeparator The end-of-line separator.
* @param lines The number of lines from the stack trace to write.
* @return The formatted Throwable that caused this Throwable.
*/
public String getCauseStackTraceAsString(final List<String> ignorePackages, final TextRenderer textRenderer, final String suffix, final String lineSeparator, final int lines) {
final StringBuilder sb = new StringBuilder();
ThrowableProxyRenderer.formatCauseStackTrace(this, sb, ignorePackages, textRenderer, suffix, lineSeparator);
formatCauseStackTraceTo(sb, ignorePackages, textRenderer, suffix, lineSeparator, lines);
return sb.toString();
}

/**
* Formats the Throwable that is the cause of this Throwable.
*
* @param sb Destination.
* @param ignorePackages List of packages to be ignored in the trace.
* @param textRenderer The message renderer.
* @param suffix Append this to the end of each stack frame.
* @param lineSeparator The end-of-line separator.
* @param lines The number of lines from the stack trace to write.
*/
public void formatCauseStackTraceTo(final StringBuilder sb, final List<String> ignorePackages, final TextRenderer textRenderer, final String suffix, final String lineSeparator, final int lines) {
ThrowableProxyRenderer.formatCauseStackTrace(this, sb, ignorePackages, textRenderer, suffix, lineSeparator, lines);
}

/**
* Returns the number of elements that are being omitted because they are common with the parent Throwable's stack
* trace.
Expand Down Expand Up @@ -313,7 +357,7 @@ public ExtendedStackTraceElement[] getExtendedStackTrace() {
* @return The formatted stack trace including packaging information.
*/
public String getExtendedStackTraceAsString() {
return this.getExtendedStackTraceAsString(null, PlainTextRenderer.getInstance(), Strings.EMPTY, EOL_STR);
return this.getExtendedStackTraceAsString(null, PlainTextRenderer.getInstance(), Strings.EMPTY, EOL_STR, Integer.MAX_VALUE);
}

/**
Expand All @@ -323,7 +367,7 @@ public String getExtendedStackTraceAsString() {
* @param suffix Append this to the end of each stack frame.
*/
public String getExtendedStackTraceAsString(final String suffix) {
return this.getExtendedStackTraceAsString(null, PlainTextRenderer.getInstance(), suffix, EOL_STR);
return this.getExtendedStackTraceAsString(null, PlainTextRenderer.getInstance(), suffix, EOL_STR, Integer.MAX_VALUE);
}

/**
Expand All @@ -334,7 +378,7 @@ public String getExtendedStackTraceAsString(final String suffix) {
* @return The formatted stack trace including packaging information.
*/
public String getExtendedStackTraceAsString(final List<String> ignorePackages, final String suffix) {
return getExtendedStackTraceAsString(ignorePackages, PlainTextRenderer.getInstance(), suffix, EOL_STR);
return getExtendedStackTraceAsString(ignorePackages, PlainTextRenderer.getInstance(), suffix, EOL_STR, Integer.MAX_VALUE);
}

/**
Expand All @@ -346,7 +390,7 @@ public String getExtendedStackTraceAsString(final List<String> ignorePackages, f
* @return The formatted stack trace including packaging information.
*/
public String getExtendedStackTraceAsString(final List<String> ignorePackages, final TextRenderer textRenderer, final String suffix) {
return getExtendedStackTraceAsString(ignorePackages, textRenderer, suffix, EOL_STR);
return getExtendedStackTraceAsString(ignorePackages, textRenderer, suffix, EOL_STR, Integer.MAX_VALUE);
}

/**
Expand All @@ -359,8 +403,22 @@ public String getExtendedStackTraceAsString(final List<String> ignorePackages, f
* @return The formatted stack trace including packaging information.
*/
public String getExtendedStackTraceAsString(final List<String> ignorePackages, final TextRenderer textRenderer, final String suffix, final String lineSeparator) {
return getExtendedStackTraceAsString(ignorePackages, textRenderer, suffix, lineSeparator, Integer.MAX_VALUE);
}

/**
* Formats the stack trace including packaging information.
*
* @param ignorePackages List of packages to be ignored in the trace.
* @param textRenderer The message renderer.
* @param suffix Append this to the end of each stack frame.
* @param lineSeparator The end-of-line separator.
* @param lines The number of lines from the stack trace to write.
* @return The formatted stack trace including packaging information.
*/
public String getExtendedStackTraceAsString(final List<String> ignorePackages, final TextRenderer textRenderer, final String suffix, final String lineSeparator, final int lines) {
final StringBuilder sb = new StringBuilder(1024);
formatExtendedStackTraceTo(sb, ignorePackages, textRenderer, suffix, lineSeparator);
formatExtendedStackTraceTo(sb, ignorePackages, textRenderer, suffix, lineSeparator, lines);
return sb.toString();
}

Expand All @@ -372,9 +430,10 @@ public String getExtendedStackTraceAsString(final List<String> ignorePackages, f
* @param textRenderer The message renderer.
* @param suffix Append this to the end of each stack frame.
* @param lineSeparator The end-of-line separator.
* @param lines The number of lines from the stack trace to write.
*/
public void formatExtendedStackTraceTo(final StringBuilder sb, final List<String> ignorePackages, final TextRenderer textRenderer, final String suffix, final String lineSeparator) {
ThrowableProxyRenderer.formatExtendedStackTraceTo(this, sb, ignorePackages, textRenderer, suffix, lineSeparator);
public void formatExtendedStackTraceTo(final StringBuilder sb, final List<String> ignorePackages, final TextRenderer textRenderer, final String suffix, final String lineSeparator, final int lines) {
ThrowableProxyRenderer.formatExtendedStackTraceTo(this, sb, ignorePackages, textRenderer, suffix, lineSeparator, lines);
}

public String getLocalizedMessage() {
Expand Down
Loading