Skip to content

Commit

Permalink
Leverage tail recursion when creating message out of Throwable
Browse files Browse the repository at this point in the history
  • Loading branch information
severn-everett authored and oshai committed Apr 16, 2024
1 parent 23785e0 commit 89e59f9
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 10 deletions.
17 changes: 7 additions & 10 deletions src/directMain/kotlin/io/github/oshai/kotlinlogging/Formatter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,13 @@ public class DefaultMessageFormatter(private val includePrefix: Boolean = true)
}
}

private fun Throwable?.throwableToString(): String {
if (this == null) {
return ""
}
var msg = ""
var current = this
while (current != null && current.cause != current) {
msg += ", Caused by: '${current.message}'"
current = current.cause
private fun Throwable?.throwableToString() = createThrowableMsg("", this)

private tailrec fun createThrowableMsg(msg: String, throwable: Throwable?): String {
return if (throwable == null || throwable.cause == throwable) {
msg
} else {
createThrowableMsg("$msg, Caused by: '${throwable.message}'", throwable.cause)
}
return msg
}
}
10 changes: 10 additions & 0 deletions src/jsTest/kotlin/io/github/oshai/kotlinlogging/SimpleJsTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,16 @@ class SimpleJsTest {
assertEquals("info", appender.lastLevel)
}

@Test
fun logThrowableTest() {
val errorLog = "Something Bad Happened"
val outerMessage = "Outer Message"
val innerMessage = "Inner Message"
val throwable = Throwable(message = outerMessage, cause = Throwable(message = innerMessage))
logger.error(throwable) { errorLog }
assertEquals("ERROR: [SimpleJsTest] $errorLog, Caused by: '$outerMessage', Caused by: '$innerMessage'", appender.lastMessage)
}

@Test
fun offLevelJsTest() {
KotlinLoggingConfiguration.LOG_LEVEL = Level.OFF
Expand Down

0 comments on commit 89e59f9

Please sign in to comment.