#include "mm-log.h"

/*支持debug info message warning critical error*/

#include <glib.h>  
#include <syslog.h>  
  
// 自定义的日志处理函数  
static void mm_log_handler(const gchar   *log_domain,  
                                  GLogLevelFlags log_level,  
                                  const gchar   *message,  
                                  gpointer       user_data)  
{  
    // 将 GLib 的日志级别转换为 syslog 的级别  
    guint16 syslog_level;  
    switch (log_level & G_LOG_LEVEL_MASK) {  
    case G_LOG_LEVEL_ERROR:  
        syslog_level = LOG_ERR;  
        break;  
    case G_LOG_LEVEL_CRITICAL:  
        syslog_level = LOG_CRIT;  
        break;  
    case G_LOG_LEVEL_WARNING:  
        syslog_level = LOG_WARNING;  
        break;  
    case G_LOG_LEVEL_MESSAGE:  
        syslog_level = LOG_NOTICE; // LOG_INFO，根据你的需求  
        break;  
    case G_LOG_LEVEL_INFO:  
        syslog_level = LOG_INFO;  
        break;  
    case G_LOG_LEVEL_DEBUG:  
        syslog_level = LOG_DEBUG;  
        break;  
    default:  
        syslog_level = LOG_NOTICE; // 默认为 NOTICE  
        break;  
    }  
  
    // 使用 syslog 发送日志消息  
    syslog(syslog_level, "%s: %s", log_domain, message);  
}  
  
void mm_log_init()
{  
    // 初始化 syslog（可选，取决于你的系统和需求）  
    openlog("maintain-mode-daemon", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);  
  
    // 设置 GLib 的日志处理函数  
    g_log_set_handler(NULL,  G_LOG_LEVEL_DEBUG | G_LOG_LEVEL_INFO | G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_WARNING , mm_log_handler, NULL);   // 去除g_error
  
    // 注意：在实际程序中，g_error() 会调用 g_log_default_handler()，后者默认会终止程序。  
    // 如果你不想在 g_error() 时终止程序，你需要自己处理它，或者设置 g_log_set_default_handler()。  
  
    // ... 其他代码 ...  
  
    // 清理（如果需要的话，通常 GLib 在程序退出时会自动清理）  
    // g_log_remove_handler(NULL, handler_id);  
    return;
}

  
