summaryrefslogtreecommitdiffstats
path: root/bindings/python/wrapper_top.c
diff options
context:
space:
mode:
authorBenjamin Dauvergne <bdauvergne@entrouvert.com>2010-06-09 16:54:50 +0000
committerBenjamin Dauvergne <bdauvergne@entrouvert.com>2010-06-09 16:54:50 +0000
commit05b537876bd1ec9fc5f34312835de4ae04e7de68 (patch)
treecba591ebd3b751d2d8466693b5dd5bcbb398c7ad /bindings/python/wrapper_top.c
parent80a930cc3775f1f12d1cd04e8836f49c97b60a6c (diff)
downloadlasso-05b537876bd1ec9fc5f34312835de4ae04e7de68.tar.gz
lasso-05b537876bd1ec9fc5f34312835de4ae04e7de68.tar.xz
lasso-05b537876bd1ec9fc5f34312835de4ae04e7de68.zip
Binding python: add GLog handler to redirect logs to Python logger named "lasso"
* fixes #20
Diffstat (limited to 'bindings/python/wrapper_top.c')
-rw-r--r--bindings/python/wrapper_top.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/bindings/python/wrapper_top.c b/bindings/python/wrapper_top.c
index 1934eaec..99f5fd9f 100644
--- a/bindings/python/wrapper_top.c
+++ b/bindings/python/wrapper_top.c
@@ -598,3 +598,45 @@ set_object_field(GObject **a_gobject_ptr, PyGObjectPtr *a_pygobject) {
*a_gobject_ptr = g_object_ref(a_pygobject->obj);
}
}
+
+static PyObject *_logger_object = NULL;
+
+static PyObject *get_logger_object() {
+ if (_logger_object == NULL) {
+ PyObject *logging_module = PyImport_ImportModule("logging");
+ _logger_object = PyObject_CallMethod(logging_module, "getLogger",
+ "s#", "lasso", sizeof("lasso")-1);
+ Py_DECREF(logging_module);
+ }
+ return _logger_object;
+}
+
+static void
+lasso_python_log(G_GNUC_UNUSED const char *domain, GLogLevelFlags log_level, const gchar *message,
+ G_GNUC_UNUSED gpointer user_data)
+{
+ PyObject *logger_object = get_logger_object();
+ char *method = NULL;
+
+ switch (log_level) {
+ case G_LOG_LEVEL_DEBUG:
+ method = "debug";
+ break;
+ case G_LOG_LEVEL_INFO:
+ case G_LOG_LEVEL_MESSAGE:
+ method = "info";
+ break;
+ case G_LOG_LEVEL_WARNING:
+ method = "warning";
+ break;
+ case G_LOG_LEVEL_CRITICAL:
+ method = "error";
+ break;
+ case G_LOG_LEVEL_ERROR:
+ method = "critical";
+ break;
+ default:
+ return;
+ }
+ PyObject_CallMethod(logger_object, method, "s#s", "%s", 2, message);
+}