generated from rnentjes/kotlin-server-web-empty
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:
76
src/commonMain/kotlin/nl/astraeus/logger/v1/Logger.kt
Normal file
76
src/commonMain/kotlin/nl/astraeus/logger/v1/Logger.kt
Normal 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())
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user