diff --git a/build.gradle.kts b/build.gradle.kts index 58cebed..210fed8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,7 +8,7 @@ plugins { } group = "nl.astraeus" -version = "1.0.2-SNAPSHOT" +version = "1.1.0" repositories { mavenCentral() diff --git a/src/commonMain/kotlin/nl/astraeus/logger/Logger.kt b/src/commonMain/kotlin/nl/astraeus/logger/Logger.kt index a69dcd8..5f6d01a 100644 --- a/src/commonMain/kotlin/nl/astraeus/logger/Logger.kt +++ b/src/commonMain/kotlin/nl/astraeus/logger/Logger.kt @@ -17,9 +17,10 @@ expect fun getCaller(): String? class Logger( var level: LogLevel = LogLevel.INFO, - val name: String = "" - + val name: String = "", + val keepRecent: Int = 1000, ) { + val recentMessages = StringArrayRing(keepRecent) fun trace(message: () -> String?) = log(LogLevel.TRACE, null, message) fun debug(message: () -> String?) = log(LogLevel.DEBUG, null, message) @@ -47,6 +48,11 @@ class Logger( val logEntry = StringBuilder() + if (name.isNotEmpty()) { + logEntry.append("[") + logEntry.append(name) + logEntry.append("] ") + } logEntry.append(timestamp) logEntry.append(" - ") logEntry.append(level.name) @@ -63,6 +69,8 @@ class Logger( println(logEntry) thrown?.printStackTrace() + + recentMessages.add(logEntry.toString()) } } } diff --git a/src/commonMain/kotlin/nl/astraeus/logger/StringArrayRing.kt b/src/commonMain/kotlin/nl/astraeus/logger/StringArrayRing.kt new file mode 100644 index 0000000..1b386e2 --- /dev/null +++ b/src/commonMain/kotlin/nl/astraeus/logger/StringArrayRing.kt @@ -0,0 +1,23 @@ +package nl.astraeus.logger + +class StringArrayRing( + val size: Int = 1000 +) { + private var writeIndex = 0 + private val array = Array(size) { "" } + + fun add(str: String) { + array[writeIndex] = str + writeIndex = (writeIndex + 1) % size + } + + fun get(): List { + var readIndex = (writeIndex + 1) % size + val result = mutableListOf() + repeat(size) { + result.add(array[readIndex]) + readIndex = (readIndex + 1) % size + } + return result + } +}