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.BuildMetadata
|
||||||
import io.gitlab.jfronny.inceptum.common.MetaHolder
|
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.util.Log
|
||||||
import io.gitlab.jfronny.inceptum.gtk.window.MainWindow
|
import io.gitlab.jfronny.inceptum.gtk.window.MainWindow
|
||||||
import io.gitlab.jfronny.inceptum.launcher.LauncherEnv
|
import io.gitlab.jfronny.inceptum.launcher.LauncherEnv
|
||||||
@ -19,6 +20,7 @@ object GtkMain {
|
|||||||
@Throws(IOException::class)
|
@Throws(IOException::class)
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun main(args: Array<String>) {
|
fun main(args: Array<String>) {
|
||||||
|
GLib.logSetWriterFunc(GtkLog)
|
||||||
LauncherEnv.initialize(GtkEnvBackend)
|
LauncherEnv.initialize(GtkEnvBackend)
|
||||||
Log.info("Launching Inceptum v" + BuildMetadata.VERSION)
|
Log.info("Launching Inceptum v" + BuildMetadata.VERSION)
|
||||||
Log.info("Loading from " + MetaHolder.BASE_PATH)
|
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.commons.logger.SystemLoggerPlus
|
||||||
import io.gitlab.jfronny.inceptum.common.Utils
|
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