00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <stdio.h>
00023 #include <stdlib.h>
00024 #include <glib.h>
00025 #include "xmmspriv/xmms_log.h"
00026
00027 static void xmms_log_handler (const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data);
00028
00029
00030 void
00031 xmms_log_init (gint verbosity)
00032 {
00033 g_log_set_handler (NULL, G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL, xmms_log_handler,
00034 GINT_TO_POINTER (verbosity));
00035
00036 xmms_log_info ("Initialized logging system :)");
00037 }
00038
00039 void
00040 xmms_log_shutdown ()
00041 {
00042 xmms_log_info ("Logging says bye bye :)");
00043 }
00044
00045
00046 static void
00047 xmms_log_handler (const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data)
00048 {
00049 const char *level = "??";
00050 gint verbosity = GPOINTER_TO_INT (user_data);
00051
00052 if (log_level & G_LOG_LEVEL_CRITICAL) {
00053 level = " FAIL";
00054 } else if (log_level & G_LOG_LEVEL_ERROR) {
00055 level = "FATAL";
00056 } else if (log_level & G_LOG_LEVEL_WARNING) {
00057 level = "ERROR";
00058 } else if (log_level & G_LOG_LEVEL_MESSAGE) {
00059 level = " INFO";
00060 if (verbosity < 1)
00061 return;
00062 } else if (log_level & G_LOG_LEVEL_DEBUG) {
00063 level = "DEBUG";
00064 if (verbosity < 2)
00065 return;
00066 }
00067
00068 printf ("%s: %s\n", level, message);
00069 fflush (stdout);
00070
00071 if (log_level & G_LOG_LEVEL_ERROR) {
00072 exit (EXIT_FAILURE);
00073 }
00074 }