From fc1abea850e21d9fa7dbb3cc80b0db76a4f0c49a Mon Sep 17 00:00:00 2001 From: Ricki Hirner Date: Mon, 14 Oct 2024 17:26:20 +0200 Subject: [PATCH 1/3] PlainTextFormatter: truncate log lines to ~10000 characters --- .../at/bitfire/davdroid/log/PlainTextFormatter.kt | 13 +++++++++++-- gradle/libs.versions.toml | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/at/bitfire/davdroid/log/PlainTextFormatter.kt b/app/src/main/kotlin/at/bitfire/davdroid/log/PlainTextFormatter.kt index 5c87d114dc..8fe0585511 100644 --- a/app/src/main/kotlin/at/bitfire/davdroid/log/PlainTextFormatter.kt +++ b/app/src/main/kotlin/at/bitfire/davdroid/log/PlainTextFormatter.kt @@ -4,6 +4,7 @@ package at.bitfire.davdroid.log +import com.google.common.base.Ascii import java.io.PrintWriter import java.io.StringWriter import java.text.SimpleDateFormat @@ -42,6 +43,11 @@ class PlainTextFormatter( lineSeparator = System.lineSeparator() ) + /** + * Maximum length of a log line (estimate). + */ + const val MAX_LENGTH = 10000 + fun shortClassName(className: String) = className .replace(Regex("^at\\.bitfire\\.(dav|cert4an|dav4an|ical4an|vcard4an)droid\\."), ".") .replace(Regex("\\$.*$"), "") @@ -72,7 +78,7 @@ class PlainTextFormatter( } } - builder.append(r.message) + builder.append(truncate(r.message)) if (withException && r.thrown != null) { val indentedStackTrace = stackTrace(r.thrown) @@ -83,7 +89,7 @@ class PlainTextFormatter( r.parameters?.let { for ((idx, param) in it.withIndex()) - builder.append("\n\tPARAMETER #").append(idx).append(" = ").append(param) + builder.append("\n\tPARAMETER #").append(idx).append(" = ").append(truncate(param.toString())) } if (lineSeparator != null) @@ -92,4 +98,7 @@ class PlainTextFormatter( return builder.toString() } + private fun truncate(s: String) = + Ascii.truncate(s, MAX_LENGTH, "[…]") + } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c2cc3aea3d..a72583314d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -21,7 +21,7 @@ androidx-work = "2.9.1" bitfire-cert4android = "f1cc9b9ca3" bitfire-dav4jvm = "fbd95a5f5a" bitfire-ical4android = "b75f33972a" -bitfire-vcard4android = "505848a85a" +bitfire-vcard4android = "47404e93fd" compose-accompanist = "0.36.0" compose-bom = "2024.09.03" dnsjava = "3.6.0" From 2add7d10f90a81994ebead01afaaf4dd27627fa1 Mon Sep 17 00:00:00 2001 From: Ricki Hirner Date: Tue, 15 Oct 2024 13:21:43 +0200 Subject: [PATCH 2/3] Update vcard4android which doesn't dump Contact photos anymore --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a72583314d..3bbf35be8d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -21,7 +21,7 @@ androidx-work = "2.9.1" bitfire-cert4android = "f1cc9b9ca3" bitfire-dav4jvm = "fbd95a5f5a" bitfire-ical4android = "b75f33972a" -bitfire-vcard4android = "47404e93fd" +bitfire-vcard4android = "5439c1f63c" compose-accompanist = "0.36.0" compose-bom = "2024.09.03" dnsjava = "3.6.0" From 095398893d3a8d367f6009be5e150dcf4f1d4818 Mon Sep 17 00:00:00 2001 From: Ricki Hirner Date: Tue, 15 Oct 2024 15:21:08 +0200 Subject: [PATCH 3/3] Add truncation test --- .../davdroid/log/PlainTextFormatterTest.kt | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 app/src/test/kotlin/at/bitfire/davdroid/log/PlainTextFormatterTest.kt diff --git a/app/src/test/kotlin/at/bitfire/davdroid/log/PlainTextFormatterTest.kt b/app/src/test/kotlin/at/bitfire/davdroid/log/PlainTextFormatterTest.kt new file mode 100644 index 0000000000..97e7665cd5 --- /dev/null +++ b/app/src/test/kotlin/at/bitfire/davdroid/log/PlainTextFormatterTest.kt @@ -0,0 +1,21 @@ +/* + * Copyright © All Contributors. See LICENSE and AUTHORS in the root directory for details. + */ + +package at.bitfire.davdroid.log + +import org.junit.Test +import java.util.logging.Level +import java.util.logging.LogRecord + +class PlainTextFormatterTest { + + @Test + fun test_format_TruncatesMessage() { + val formatter = PlainTextFormatter.DEFAULT + val result = formatter.format(LogRecord(Level.INFO, "a".repeat(50000))) + // PlainTextFormatter.MAX_LENGTH is 10,000, so the message should be truncated to 10,000 + something + assert(result.length <= 10100) + } + +} \ No newline at end of file