feat(gtk): redirect GTK logs through our custom logger
This commit is contained in:
parent
fb58da96c8
commit
3d85f9ec12
@ -2,6 +2,7 @@ package io.gitlab.jfronny.inceptum.gtk
|
||||
|
||||
import io.gitlab.jfronny.inceptum.common.BuildMetadata
|
||||
import io.gitlab.jfronny.inceptum.common.MetaHolder
|
||||
import io.gitlab.jfronny.inceptum.gtk.util.GtkLog
|
||||
import io.gitlab.jfronny.inceptum.gtk.util.Log
|
||||
import io.gitlab.jfronny.inceptum.gtk.window.MainWindow
|
||||
import io.gitlab.jfronny.inceptum.launcher.LauncherEnv
|
||||
@ -19,6 +20,7 @@ object GtkMain {
|
||||
@Throws(IOException::class)
|
||||
@JvmStatic
|
||||
fun main(args: Array<String>) {
|
||||
GLib.logSetWriterFunc(GtkLog)
|
||||
LauncherEnv.initialize(GtkEnvBackend)
|
||||
Log.info("Launching Inceptum v" + BuildMetadata.VERSION)
|
||||
Log.info("Loading from " + MetaHolder.BASE_PATH)
|
||||
|
@ -2,5 +2,36 @@ package io.gitlab.jfronny.inceptum.gtk.util
|
||||
|
||||
import io.gitlab.jfronny.commons.logger.SystemLoggerPlus
|
||||
import io.gitlab.jfronny.inceptum.common.Utils
|
||||
import org.gnome.glib.LogField
|
||||
import org.gnome.glib.LogLevelFlags
|
||||
import org.gnome.glib.LogWriterFunc
|
||||
import org.gnome.glib.LogWriterOutput
|
||||
|
||||
object Log : SystemLoggerPlus by Utils.LOGGER
|
||||
object Log : SystemLoggerPlus by Utils.LOGGER
|
||||
object GtkLog : LogWriterFunc {
|
||||
// Based on https://github.com/jwharm/java-gi-examples/blob/6e08b4d2e62998c53d855b32433513308e01e82d/Logging/src/main/java/io/github/jwharm/javagi/examples/logging/SLF4JLogWriterFunc.java
|
||||
// Original license: LGPL-2.1, written by Jan-Willem Harmannij
|
||||
override fun run(logLevel: Set<LogLevelFlags>, fields: Array<LogField>): LogWriterOutput {
|
||||
val level = logLevel.firstOrNull()?.let { convertLevel(it) } ?: return LogWriterOutput.UNHANDLED
|
||||
val domain = readStringFromKey("GLIB_DOMAIN", fields) ?: return LogWriterOutput.UNHANDLED
|
||||
val message = readStringFromKey("MESSAGE", fields) ?: return LogWriterOutput.UNHANDLED
|
||||
val source = readStringFromKey("CODE_FILE", fields) ?: "<unknown>"
|
||||
val func = readStringFromKey("CODE_FUNC", fields)?.let { "::$it" } ?: ""
|
||||
val line = readStringFromKey("CODE_LINE", fields)?.let { ":$it" } ?: ""
|
||||
System.getLogger(domain).log(level, "$source$func$line: $message")
|
||||
return LogWriterOutput.HANDLED
|
||||
}
|
||||
|
||||
private fun convertLevel(flag: LogLevelFlags) = when (flag) {
|
||||
LogLevelFlags.LEVEL_ERROR, LogLevelFlags.LEVEL_CRITICAL -> System.Logger.Level.ERROR
|
||||
LogLevelFlags.LEVEL_WARNING -> System.Logger.Level.WARNING
|
||||
LogLevelFlags.LEVEL_MESSAGE, LogLevelFlags.LEVEL_INFO -> System.Logger.Level.INFO
|
||||
LogLevelFlags.LEVEL_DEBUG -> System.Logger.Level.DEBUG
|
||||
else -> null
|
||||
}
|
||||
private fun readStringFromKey(key: String, logFields: Array<LogField>) = logFields.firstOrNull { it.readKey() == key }?.readString()
|
||||
private fun LogField.readString(): String {
|
||||
val length = readLength()
|
||||
return readValue().reinterpret(if (length == -1L) Long.MAX_VALUE else length).getString(0)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user