Refactor package structure for logger to include versioning.

Moved all logger-related classes to the `nl.astraeus.logger.v1` package to introduce versioning and improve maintainability. Updated logic in `StringArrayRing` to filter out blank lines during data retrieval. This change establishes a foundation for future updates without breaking compatibility.
This commit is contained in:
2025-05-15 16:14:56 +02:00
parent bf4217ea61
commit ecfe2b9122
4 changed files with 8 additions and 5 deletions

View File

@@ -0,0 +1,76 @@
package nl.astraeus.logger.v1
enum class LogLevel(
val label: String
) {
TRACE("Trace"),
DEBUG("Debug"),
INFO(" Info"),
WARN(" Warn"),
ERROR("Error"),
FATAL("Fatal");
}
expect fun getTimestamp(): String
expect fun getCurrentThread(): String?
expect fun getCaller(): String?
class Logger(
var level: LogLevel = LogLevel.INFO,
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)
fun info(message: () -> String?) = log(LogLevel.INFO, null, message)
fun warn(message: () -> String?) = log(LogLevel.WARN, null, message)
fun error(message: () -> String?) = log(LogLevel.ERROR, null, message)
fun fatal(message: () -> String?) = log(LogLevel.FATAL, null, message)
fun trace(thrown: Throwable, message: () -> String?) = log(LogLevel.TRACE, thrown, message)
fun debug(thrown: Throwable, message: () -> String?) = log(LogLevel.DEBUG, thrown, message)
fun info(thrown: Throwable, message: () -> String?) = log(LogLevel.INFO, thrown, message)
fun warn(thrown: Throwable, message: () -> String?) = log(LogLevel.WARN, thrown, message)
fun error(thrown: Throwable, message: () -> String?) = log(LogLevel.ERROR, thrown, message)
fun fatal(thrown: Throwable, message: () -> String?) = log(LogLevel.FATAL, thrown, message)
private fun log(
level: LogLevel,
thrown: Throwable? = null,
message: () -> String?
) {
if (level.ordinal >= this.level.ordinal) {
val timestamp: String = getTimestamp()
val thread: String? = getCurrentThread()
val caller: String? = getCaller()
val logEntry = StringBuilder()
if (name.isNotEmpty()) {
logEntry.append("[")
logEntry.append(name)
logEntry.append("] ")
}
logEntry.append(timestamp)
logEntry.append(" - ")
logEntry.append(level.label)
logEntry.append(" - ")
if (thread != null) {
logEntry.append(thread)
logEntry.append(" - ")
}
if (caller != null) {
logEntry.append(caller)
logEntry.append(" - ")
}
logEntry.append(message() ?: "<no message>")
println(logEntry)
thrown?.printStackTrace()
recentMessages.add(logEntry.toString())
}
}
}

View File

@@ -0,0 +1,26 @@
package nl.astraeus.logger.v1
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<String> {
var readIndex = (writeIndex + 1) % size
val result = mutableListOf<String>()
repeat(size) {
val line = array[readIndex]
if (line.isNotBlank()) {
result.add(array[readIndex])
}
readIndex = (readIndex + 1) % size
}
return result
}
}