diff --git a/core/src/main/java/dev/faststats/ErrorHelper.java b/core/src/main/java/dev/faststats/ErrorHelper.java index 3649dcd5..e1c0b864 100644 --- a/core/src/main/java/dev/faststats/ErrorHelper.java +++ b/core/src/main/java/dev/faststats/ErrorHelper.java @@ -16,9 +16,9 @@ import java.util.regex.Pattern; final class ErrorHelper { - private static final int MESSAGE_LENGTH = Math.min(1000, Integer.getInteger("faststats.message-length", 500)); - private static final int STACK_TRACE_LENGTH = Math.min(500, Integer.getInteger("faststats.stack-trace-length", 300)); - private static final int STACK_TRACE_LIMIT = Math.min(50, Integer.getInteger("faststats.stack-trace-limit", 15)); + public static final int MAX_MESSAGE_LENGTH = 1000; + public static final int MAX_FRAME_SIZE = 300; + public static final int MAX_STACK_SIZE = 30; private static final Set allowedNames = Set.of("minecraft", "server", "root", "ubuntu"); private static final List> defaultAnonymizationEntries = defaultAnonymizationEntries(); @@ -48,7 +48,7 @@ private static JsonObject compileAll(final TrackedError trackedError, @Nullable final var stack = collapseStackTrace(elements); final var list = new ArrayList<>(stack); if (suppress != null) list.removeAll(suppress); - final var traces = Math.min(list.size(), STACK_TRACE_LIMIT); + final var traces = Math.min(list.size(), MAX_STACK_SIZE); populateTraces(traces, list, elements, stacktrace); appendCauseChain(error.getCause(), stack, suppress, stacktrace, customPatterns); @@ -85,7 +85,7 @@ private static void appendCauseChain(@Nullable Throwable cause, final List(causeStack); causeList.removeAll(toSuppress); - final var causeTraces = Math.min(causeList.size(), STACK_TRACE_LIMIT); + final var causeTraces = Math.min(causeList.size(), MAX_STACK_SIZE); populateTraces(causeTraces, causeList, causeElements, stacktrace); cause = cause.getCause(); @@ -96,8 +96,8 @@ private static void populateTraces(final int traces, final List list, fi final JsonArray stacktrace) { for (var i = 0; i < traces; i++) { final var string = list.get(i); - if (string.length() <= STACK_TRACE_LENGTH) stacktrace.add(" at " + string); - else stacktrace.add(" at " + string.substring(0, STACK_TRACE_LENGTH) + "..."); + if (MAX_FRAME_SIZE < 0 || string.length() <= MAX_FRAME_SIZE) stacktrace.add(" at " + string); + else stacktrace.add(" at " + string.substring(0, MAX_FRAME_SIZE) + "..."); } if (traces > 0 && traces < list.size()) { stacktrace.add(" ... " + (list.size() - traces) + " more"); @@ -216,8 +216,8 @@ private static boolean isSameClassLoader(final ClassLoader classLoader, final Cl private static @Nullable String getAnonymizedMessage(final Throwable error, final List> customPatterns) { final var message = error.getMessage(); if (message == null) return null; - var truncated = message.length() > MESSAGE_LENGTH - ? message.substring(0, MESSAGE_LENGTH) + "..." + var truncated = message.length() > MAX_MESSAGE_LENGTH + ? message.substring(0, MAX_MESSAGE_LENGTH) + "..." : message; for (final var entry : customPatterns) { truncated = entry.getKey().matcher(truncated).replaceAll(entry.getValue()); diff --git a/core/src/test/java/dev/faststats/ErrorTrackerTest.java b/core/src/test/java/dev/faststats/ErrorTrackerTest.java index 88722cd3..91e6a3a6 100644 --- a/core/src/test/java/dev/faststats/ErrorTrackerTest.java +++ b/core/src/test/java/dev/faststats/ErrorTrackerTest.java @@ -285,13 +285,13 @@ public void repeatingStackFramesAreCollapsed() { @Test public void longMessagesAreTruncatedBeforeSerialization() { - final var message = "a".repeat(600); + final var message = "a".repeat(ErrorHelper.MAX_MESSAGE_LENGTH * 2); tracker.trackError(message); final var report = tracker.getFullData().get(0).getAsJsonObject(); final var serialized = report.get("message").getAsString(); - assertEquals(503, serialized.length()); + assertEquals(ErrorHelper.MAX_MESSAGE_LENGTH + 3, serialized.length()); assertTrue(serialized.endsWith("...")); assertEquals("java.lang.RuntimeException: " + serialized, report.getAsJsonArray("stack").get(0).getAsString()); }