Jelajahi Sumber

tools: redirect GLib messages to internal log*() functions

Daniele Bartolini 3 tahun lalu
induk
melakukan
fb81379b61
1 mengubah file dengan 40 tambahan dan 0 penghapusan
  1. 40 0
      tools/level_editor/level_editor.vala

+ 40 - 0
tools/level_editor/level_editor.vala

@@ -2660,6 +2660,46 @@ private void device_frame_delayed(uint delay_ms, ConsoleClient client)
 
 public static int main(string[] args)
 {
+	// Redirect GLib logs to internal log*().
+	GLib.set_print_handler((msg) => { logi(msg); });
+	GLib.set_printerr_handler((msg) => { loge(msg); });
+
+	GLib.Log.set_writer_func((log_level, fields) => {
+			foreach (var field in fields) {
+				if (field.key == "MESSAGE") {
+					switch (log_level) {
+					case LEVEL_DEBUG:
+#if CROWN_DEBUG
+						logi((string)field.value);
+#endif
+						break;
+
+					case LEVEL_INFO:
+					case LEVEL_MESSAGE:
+						logi((string)field.value);
+						break;
+
+					case LEVEL_CRITICAL:
+					case LEVEL_WARNING:
+						logw((string)field.value);
+						break;
+
+					case LEVEL_ERROR:
+						loge((string)field.value);
+						break;
+
+					default:
+						logw((string)field.value);
+						break;
+					}
+
+					return GLib.LogWriterOutput.HANDLED;
+				}
+			}
+
+			return GLib.LogWriterOutput.UNHANDLED;
+		});
+
 	// If args does not contain --child, spawn the launcher.
 	int ii;
 	for (ii = 0; ii < args.length; ++ii) {