From 02b78320ec181d562154e9fe91fe6ec4c2861829 Mon Sep 17 00:00:00 2001 From: Azalea <22280294+hykilpikonna@users.noreply.github.com> Date: Mon, 18 Mar 2024 03:06:05 -0400 Subject: [PATCH] [+] Better logging --- src/main/java/ext/Ext.kt | 6 +++ .../{AquaServerApplication.kt => Entry.kt} | 10 ++--- .../icu/samnyan/aqua/spring/AquaLogging.kt | 44 +++++++++++++++++++ src/main/resources/logback-spring.xml | 38 ++++++++++++++++ 4 files changed, 92 insertions(+), 6 deletions(-) rename src/main/java/icu/samnyan/aqua/{AquaServerApplication.kt => Entry.kt} (81%) create mode 100644 src/main/java/icu/samnyan/aqua/spring/AquaLogging.kt create mode 100644 src/main/resources/logback-spring.xml diff --git a/src/main/java/ext/Ext.kt b/src/main/java/ext/Ext.kt index 46472005..f68001dc 100644 --- a/src/main/java/ext/Ext.kt +++ b/src/main/java/ext/Ext.kt @@ -82,6 +82,12 @@ operator fun Map.plus(map: Map) = (if (this is MutableMap) this else toMutableMap()).apply { putAll(map) } operator fun MutableMap.plusAssign(map: Map) { putAll(map) } +// Strings +operator fun Str.get(range: IntRange) = substring(range.first, (range.last + 1).coerceAtMost(length)) +operator fun Str.get(start: Int, end: Int) = substring(start, end.coerceAtMost(length)) +fun Str.center(width: Int, padChar: Char = ' ') = padStart((length + width) / 2, padChar).padEnd(width, padChar) + +// Coroutine suspend fun async(block: suspend kotlinx.coroutines.CoroutineScope.() -> T): T = withContext(Dispatchers.IO) { block() } // Paths diff --git a/src/main/java/icu/samnyan/aqua/AquaServerApplication.kt b/src/main/java/icu/samnyan/aqua/Entry.kt similarity index 81% rename from src/main/java/icu/samnyan/aqua/AquaServerApplication.kt rename to src/main/java/icu/samnyan/aqua/Entry.kt index 19b7236c..fd15ff97 100644 --- a/src/main/java/icu/samnyan/aqua/AquaServerApplication.kt +++ b/src/main/java/icu/samnyan/aqua/Entry.kt @@ -9,17 +9,14 @@ import java.io.File @SpringBootApplication @EnableScheduling -class AquaServerApplication +class Entry -/** - * Main method, entry point of the application - */ fun main(args: Array) { // If data/ is not found, create it File("data").mkdirs() // Run the application - val ctx = SpringApplication.run(AquaServerApplication::class.java, *args) + val ctx = SpringApplication.run(Entry::class.java, *args) // Start the AimeDbServer val aimeDbServer = ctx.getBean(AimeDbServer::class.java) @@ -28,4 +25,5 @@ fun main(args: Array) { // Start the AutoChecker val checker = ctx.getBean(AutoChecker::class.java) checker.check() -} \ No newline at end of file +} + diff --git a/src/main/java/icu/samnyan/aqua/spring/AquaLogging.kt b/src/main/java/icu/samnyan/aqua/spring/AquaLogging.kt new file mode 100644 index 00000000..6802afc7 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/spring/AquaLogging.kt @@ -0,0 +1,44 @@ +package icu.samnyan.aqua.spring + +import ch.qos.logback.classic.spi.ILoggingEvent +import ch.qos.logback.core.pattern.CompositeConverter +import ext.center +import ext.get +import org.springframework.boot.ansi.AnsiColor +import org.springframework.boot.ansi.AnsiOutput + +private const val PROJECT_PACKAGE_PREFIX = "icu.samnyan.aqua" +private const val SEGA_PACKAGE_PREFIX = "icu.samnyan.aqua.sega" +private val SYSTEM_COLOR = AnsiColor.WHITE +private val SEGA_COLOR = AnsiColor.MAGENTA +private val MISC_COLOR = AnsiColor.BRIGHT_BLUE + +class LoggerComponent : CompositeConverter() { + override fun transform(event: ILoggingEvent, input: String): String { + val (str, clr) = if (event.loggerName.startsWith(PROJECT_PACKAGE_PREFIX)) { + val sub = event.loggerName.substring(PROJECT_PACKAGE_PREFIX.length + 1) + if (sub.startsWith("sega")) sub.substring(5).substringBefore(".")[0, 6].padEnd(6).uppercase() to SEGA_COLOR + else sub.substringBefore(".")[0, 6].padEnd(6).uppercase() to MISC_COLOR + } else "SYSTEM" to SYSTEM_COLOR + return AnsiOutput.toString(clr, str) + } +} + +class LoggerClassColor : CompositeConverter() { + override fun transform(event: ILoggingEvent, rawInput: String): String { + var input = rawInput + val clr = when { + event.loggerName.startsWith(SEGA_PACKAGE_PREFIX) -> { + input = event.loggerName.substring(SEGA_PACKAGE_PREFIX.length + 1) + SEGA_COLOR + } + event.loggerName.startsWith(PROJECT_PACKAGE_PREFIX) -> { + input = event.loggerName.substring(PROJECT_PACKAGE_PREFIX.length + 1) + MISC_COLOR + } + else -> SYSTEM_COLOR + } + input = input[0, 40].padEnd(40) + return AnsiOutput.toString(clr, input) + } +} \ No newline at end of file diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml new file mode 100644 index 00000000..2544600f --- /dev/null +++ b/src/main/resources/logback-spring.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + %clr(%date{MM-dd HH:mm:ss}){magenta} %clr(${LOG_LEVEL_PATTERN:-%-5p}) %cmp | %cls(%-40.40logger{39}) : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}} + + + + + + ${LOG_FILE} + + ${LOG_FILE}.%d{yyyy-MM-dd}.gz + 7 + + + + + + + + + + + + +