2022-06-07 15:42:19 +00:00
|
|
|
package dev.inmo.kslog.common
|
|
|
|
|
|
|
|
|
|
|
|
enum class LogLevel {
|
2022-06-08 15:45:37 +00:00
|
|
|
DEBUG,
|
2022-06-07 15:42:19 +00:00
|
|
|
VERBOSE,
|
|
|
|
INFO,
|
|
|
|
WARNING,
|
|
|
|
ERROR,
|
|
|
|
ASSERT,
|
|
|
|
}
|
|
|
|
|
|
|
|
interface KSLog {
|
|
|
|
fun performLog(level: LogLevel, tag: String?, message: String, throwable: Throwable?)
|
2022-06-09 03:56:27 +00:00
|
|
|
fun performLog(level: LogLevel, message: String, throwable: Throwable?) = performLog(level, null, message, throwable)
|
|
|
|
fun performLog(
|
|
|
|
level: LogLevel,
|
|
|
|
tag: String?,
|
|
|
|
throwable: Throwable?,
|
|
|
|
messageBuilder: () -> String
|
|
|
|
) = performLog(level, tag, messageBuilder(), throwable)
|
2022-06-09 10:29:56 +00:00
|
|
|
suspend fun performLogS(
|
2022-06-09 03:56:27 +00:00
|
|
|
level: LogLevel,
|
|
|
|
tag: String?,
|
|
|
|
throwable: Throwable?,
|
|
|
|
messageBuilder: suspend () -> String
|
|
|
|
) = performLog(level, tag, messageBuilder(), throwable)
|
2022-06-07 15:42:19 +00:00
|
|
|
companion object : KSLog {
|
|
|
|
private var defaultLogger: KSLog? = null
|
2022-06-07 15:52:42 +00:00
|
|
|
var default: KSLog
|
2022-06-07 15:42:19 +00:00
|
|
|
get() {
|
|
|
|
return defaultLogger ?: KSLog("app").also {
|
|
|
|
defaultLogger = it
|
|
|
|
}
|
|
|
|
}
|
|
|
|
set(value) {
|
|
|
|
defaultLogger = value
|
|
|
|
}
|
2022-06-07 15:52:42 +00:00
|
|
|
override fun performLog(level: LogLevel, tag: String?, message: String, throwable: Throwable?) = default.performLog(level, tag, message, throwable)
|
2022-06-09 10:29:56 +00:00
|
|
|
override fun performLog(level: LogLevel, message: String, throwable: Throwable?) = default.performLog(level, message, throwable)
|
|
|
|
override fun performLog(
|
|
|
|
level: LogLevel,
|
|
|
|
tag: String?,
|
|
|
|
throwable: Throwable?,
|
|
|
|
messageBuilder: () -> String
|
|
|
|
) = default.performLog(level, tag, throwable, messageBuilder)
|
|
|
|
override suspend fun performLogS(
|
|
|
|
level: LogLevel,
|
|
|
|
tag: String?,
|
|
|
|
throwable: Throwable?,
|
|
|
|
messageBuilder: suspend () -> String
|
|
|
|
) = default.performLogS(level, tag, throwable, messageBuilder)
|
2022-06-07 15:42:19 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
operator fun KSLog.invoke(performLogCallback: (level: LogLevel, tag: String?, message: String, throwable: Throwable?) -> Unit) = CallbackKSLog(performLogCallback)
|
|
|
|
|
2022-06-09 10:29:56 +00:00
|
|
|
internal expect val defaultLogging: (level: LogLevel, tag: String, message: String, throwable: Throwable?) -> Unit
|
|
|
|
|
|
|
|
fun KSLog(
|
2022-06-07 15:42:19 +00:00
|
|
|
defaultTag: String,
|
2022-06-09 10:29:56 +00:00
|
|
|
filter: MessageFilter = { _, _, _ -> true },
|
2022-06-08 16:51:03 +00:00
|
|
|
messageFormatter: MessageFormatter = defaultMessageFormatter
|
2022-06-09 10:29:56 +00:00
|
|
|
): KSLog = DefaultKSLog(
|
|
|
|
defaultTag,
|
|
|
|
filter,
|
|
|
|
messageFormatter
|
|
|
|
)
|
2022-06-07 15:42:19 +00:00
|
|
|
|
|
|
|
fun KSLog(
|
|
|
|
defaultTag: String,
|
2022-06-08 16:51:03 +00:00
|
|
|
levels: Iterable<LogLevel>,
|
|
|
|
messageFormatter: MessageFormatter = defaultMessageFormatter
|
2022-06-08 10:06:41 +00:00
|
|
|
): KSLog {
|
|
|
|
val levels = levels.toSet()
|
2022-06-09 10:29:56 +00:00
|
|
|
return KSLog (defaultTag, { l, _, _ ->
|
2022-06-08 10:06:41 +00:00
|
|
|
l in levels
|
2022-06-08 16:51:03 +00:00
|
|
|
}, messageFormatter)
|
2022-06-07 15:42:19 +00:00
|
|
|
}
|
2022-06-07 16:00:32 +00:00
|
|
|
|
2022-06-08 12:23:11 +00:00
|
|
|
fun KSLog(
|
2022-06-08 10:10:34 +00:00
|
|
|
defaultTag: String,
|
|
|
|
firstLevel: LogLevel,
|
|
|
|
secondLevel: LogLevel,
|
2022-06-08 16:51:03 +00:00
|
|
|
vararg otherLevels: LogLevel,
|
|
|
|
messageFormatter: MessageFormatter = defaultMessageFormatter,
|
|
|
|
): KSLog = KSLog(defaultTag, setOf(firstLevel, secondLevel, *otherLevels), messageFormatter)
|
2022-06-08 10:10:34 +00:00
|
|
|
|
2022-06-07 16:00:32 +00:00
|
|
|
fun KSLog(
|
|
|
|
defaultTag: String,
|
2022-06-08 16:51:03 +00:00
|
|
|
minLoggingLevel: LogLevel,
|
|
|
|
messageFormatter: MessageFormatter = defaultMessageFormatter,
|
|
|
|
): KSLog = KSLog (
|
|
|
|
defaultTag,
|
2022-06-09 10:29:56 +00:00
|
|
|
{ l, _, _ ->
|
2022-06-08 16:51:03 +00:00
|
|
|
minLoggingLevel.ordinal <= l.ordinal
|
|
|
|
},
|
|
|
|
messageFormatter
|
|
|
|
)
|