Program messages are logged to syslog
authorThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Tue, 12 Sep 2006 21:39:40 +0000 (21:39 +0000)
committerThadeu Lima de Souza Cascardo <cascardo@minaslivre.org>
Tue, 12 Sep 2006 21:39:40 +0000 (21:39 +0000)
Program messages are sent to syslog with LOG_DAEMON facility. They are
generated using GLib log support with a custom handler.

improxy.c
log.c [new file with mode: 0644]
log.h [new file with mode: 0644]

index 6e15f1e..987ecb0 100644 (file)
--- a/improxy.c
+++ b/improxy.c
@@ -1,6 +1,7 @@
 #include <glib.h>
 #include <gnet.h>
 #include <stdio.h>
+#include "log.h"
 
 void client_event (GConn* conn, GConnEvent* event, gpointer data)
 {
@@ -56,6 +57,7 @@ int main ()
   gint port;
 
   gnet_init ();
+  im_log_init ();
 
   keyfile =  g_key_file_new ();
 
diff --git a/log.c b/log.c
new file mode 100644 (file)
index 0000000..58128c7
--- /dev/null
+++ b/log.c
@@ -0,0 +1,33 @@
+#include <glib.h>
+#include <syslog.h>
+
+static int map_level (GLogLevelFlags level)
+{
+  if (level & G_LOG_LEVEL_ERROR)
+    return LOG_CRIT;
+  if (level & G_LOG_LEVEL_CRITICAL)
+    return LOG_ERR;
+  if (level & G_LOG_LEVEL_WARNING)
+    return LOG_WARNING;
+  if (level & G_LOG_LEVEL_MESSAGE)
+    return LOG_NOTICE;
+  if (level & G_LOG_LEVEL_INFO)
+    return LOG_INFO;
+  if (level & G_LOG_LEVEL_DEBUG)
+    return LOG_DEBUG;
+}
+
+static void log_func (const gchar* domain,
+                     GLogLevelFlags level,
+                     const gchar* message,
+                     gpointer data)
+{
+  syslog (map_level (level), "%s", message);
+}
+
+void im_log_init ()
+{
+  openlog ("improxy", LOG_NDELAY | LOG_NOWAIT, LOG_DAEMON);
+  g_log_set_handler (NULL, G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL
+                    | G_LOG_FLAG_RECURSION, log_func, NULL);
+}
diff --git a/log.h b/log.h
new file mode 100644 (file)
index 0000000..d9e5992
--- /dev/null
+++ b/log.h
@@ -0,0 +1,6 @@
+#ifndef LOG_H
+#define LOG_H
+
+void im_log_init ();
+
+#endif