zoukankan      html  css  js  c++  java
  • libevent::日志

    LibEvent 能记录内部的错误和警告日志,如果编译进日志支持功能,也会记录调试信息.默认情况下这些消息都是输出 到 stderr,
    你也可以通过提供自己的日志函数的方法来覆盖这种行为.
    为了覆盖 LibEvent 的日志行为,你需要自己编写满足 event_log_cb 格式的函数,然后将函数作为参数传入 event_set_log_callback().

    无论什么时候只要 LibEvent 需要写一个日志,都会进入到你提供的日志函数.

    你需要让 LibEvent 日志回到默认功能的时候, 只需要再次调用 event_set_log_callback()并且传一个 NULL 即可.
    通常调试日志都是禁用的,也都不会发送给日志回调函数,
    但是如果 libEvent 是编译成支持打开调试日志,你就可以手 动打开调试日志.
    
    #define EVENT_DBG_NONE 0 
    #define EVENT_DBG_ALL 0xffffffffu 
    void event_enable_debug_logging(ev_uint32_t which);
    
    调用 event_enable_debug_logging() 使用 EVENT_DBG_NONE 得到默认行为,
    使用 EVENT_DBG_ALL 开启所有可支持的调试日志
    处理致命错误 
    当 LibEvent 检测到一个不可恢复的致命错误(比如数据结构损坏),它的默认行为是调用 exit()或 abort()来退出
    这意味着有一个错误,要么在你的代码中,要么在 LibEvent 中.
    可以为 LibEvent 提供退出时候应该调用的函数,覆盖默认行为.
    接口 typedef void ( * event_fatal_cb)(int err); 
    void event_set_fatal_callback(event_fatal_cb cb);
    之后如果 LibEvent 遇到致命错误,它就会调用你提供的函数。
    void log_callback(int severity, const char *msg)
    {
        char szBuffer[512];
    
        FILE *pFd = fopen("./log.txt", "ab+");
        if (pFd == NULL)
            return;
    
        const char *severity_str;
        switch (severity)
        {
        case EVENT_LOG_DEBUG:
            severity_str = "debug";
            break;
        case EVENT_LOG_MSG:
            severity_str = "msg";
            break;
        case EVENT_LOG_WARN:
            severity_str = "warn";
            break;
        case EVENT_LOG_ERR:
            severity_str = "err";
            break;
        default:
            severity_str = "???";
            break;
        }
    
        snprintf(szBuffer, sizeof(szBuffer), "[%s]:%s", severity_str, msg);
    
        (void)fwrite(szBuffer, 1, strlen(szBuffer), pFd);
    
        fclose(pFd);
    }
    
    
    int main()
    {
        //替换记录日志的默认函数
        event_set_log_callback(log_callback);
    }
  • 相关阅读:
    java:选择排序
    java:快速排序
    MYSQL 5.7版本修改密码
    多级代理下获取客户端真实IP
    map相关操作:map遍历,map转换为list
    【导航】微信开发者相关网址导航
    【java】微信开发后台官方后台配置篇
    HTML页面加载loading
    表单JS提交失效
    后台request获得所有参数(当你不知道它包含什么参数)
  • 原文地址:https://www.cnblogs.com/osbreak/p/10269691.html
Copyright © 2011-2022 走看看