Files
simple-persistence-kotlin/src/main/kotlin/nl/astraeus/persistence/Logger.kt
2024-05-07 14:09:58 +02:00

63 lines
1.7 KiB
Kotlin

package nl.astraeus.persistence
enum class LogLevel {
TRACE,
DEBUG,
INFO,
WARN,
ERROR
}
object Logger {
var level: LogLevel = LogLevel.DEBUG
var tracePrinter: (String) -> Unit = { println(it) }
var debugPrinter: (String) -> Unit = { println(it) }
var infoPrinter: (String) -> Unit = { println(it) }
var warnPrinter: (String) -> Unit = { println(it) }
var errorPrinter: (String) -> Unit = { System.err.println(it) }
fun trace(message: String, vararg parameters: Any?) {
if (level <= LogLevel.TRACE) {
writeLogMessage(LogLevel.TRACE, message, *parameters)
}
}
fun debug(message: String, vararg parameters: Any?) {
if (level <= LogLevel.DEBUG) {
writeLogMessage(LogLevel.DEBUG, message, *parameters)
}
}
fun info(message: String, vararg parameters: Any?) {
if (level <= LogLevel.INFO) {
writeLogMessage(LogLevel.INFO, message, *parameters)
}
}
fun warn(message: String, vararg parameters: Any?) {
if (level <= LogLevel.DEBUG) {
writeLogMessage(LogLevel.DEBUG, message, *parameters)
}
}
fun error(message: String, vararg parameters: Any?) {
if (level <= LogLevel.ERROR) {
writeLogMessage(LogLevel.ERROR, message, *parameters)
}
}
private fun writeLogMessage(level: LogLevel, message: String, vararg parameters: Any?) {
val formattedMessage = "[${level}] - ${message.format(*parameters)}"
when (level) {
LogLevel.TRACE -> tracePrinter(formattedMessage)
LogLevel.DEBUG -> debugPrinter(formattedMessage)
LogLevel.INFO -> infoPrinter(formattedMessage)
LogLevel.WARN -> warnPrinter(formattedMessage)
LogLevel.ERROR -> errorPrinter(formattedMessage)
}
}
}