[Spice-devel] [spice-xpi 5/5] Add glib Windows logging

Christophe Fergeau cfergeau at redhat.com
Sun Mar 24 04:16:29 PDT 2013


As it's not very convenient to get logging output from the plugin
while firefox is running, this commit adds a dumb glib logging
implementation that writes the logging information to a file.
As this is not efficient at all, it's disabled by default unless
the SPICE_XPI_LOG_TO_FILE environment variable is set.
---
 SpiceXPI/src/plugin/plugin.cpp | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/SpiceXPI/src/plugin/plugin.cpp b/SpiceXPI/src/plugin/plugin.cpp
index 2e59bfd..e975195 100644
--- a/SpiceXPI/src/plugin/plugin.cpp
+++ b/SpiceXPI/src/plugin/plugin.cpp
@@ -173,6 +173,46 @@ void NS_DestroyPluginInstance(nsPluginInstanceBase *aPlugin)
 //
 // nsPluginInstance class implementation
 //
+static void glib_log_to_file(const gchar *log_domain,
+                             GLogLevelFlags log_level,
+                             const gchar *message,
+                             gpointer user_data)
+{
+    if ((log_level & G_LOG_LEVEL_MASK) > G_LOG_LEVEL_MESSAGE) {
+        return;
+    }
+    if (log_domain != NULL) {
+        fwrite(log_domain, strlen(log_domain), 1, (FILE *)user_data);
+        fwrite(": ", 2, 1, (FILE *)user_data);
+    }
+    if (message != NULL) {
+        fwrite(message, strlen(message), 1, (FILE *)user_data);
+    }
+    fwrite("\r\n", 2, 1, (FILE *)user_data);
+    fflush((FILE *)user_data);
+}
+
+static void glib_setup_logging(void)
+{
+#if defined(XP_WIN)
+    FILE *log_file;
+    gchar *log_filename;
+
+    if (!g_getenv("SPICE_XPI_LOG_TO_FILE"))
+        return;
+
+    log_filename = g_build_filename(g_get_tmp_dir(), "SPICEXPI.LOG", NULL);
+    log_file = fopen(log_filename, "w+");
+    if (log_file != NULL) {
+        g_log_set_default_handler(glib_log_to_file, log_file);
+    } else {
+        gchar *log_msg;
+        log_msg = g_strdup_printf("failed to open %s", log_filename);
+        g_free(log_msg);
+    }
+    g_free(log_filename);
+#endif
+}
 
 nsPluginInstance::nsPluginInstance(NPP aInstance):
     nsPluginInstanceBase(),
@@ -191,6 +231,7 @@ nsPluginInstance::nsPluginInstance(NPP aInstance):
 #if !GLIB_CHECK_VERSION(2, 35, 0)
     g_type_init();
 #endif
+    glib_setup_logging();
 
 #if defined(XP_WIN)
     m_external_controller = new SpiceControllerWin(this);
-- 
1.8.1.4



More information about the Spice-devel mailing list