头文件定义

#ifndef __LOGGER_HPP__
#define __LOGGER_HPP__
 
 
#include <string>
#include <stdarg.h>
 
#define LOGF(...) __log_info(Level::FATAL, __VA_ARGS__)
#define LOGE(...) __log_info(Level::ERROR, __VA_ARGS__)
#define LOGW(...) __log_info(Level::WARN,  __VA_ARGS__)
#define LOGI(...)  __log_info(Level::INFO,  __VA_ARGS__)
#define LOGV(...) __log_info(Level::VERB,  __VA_ARGS__)
#define LOGD(...) __log_info(Level::DEBUG, __VA_ARGS__)

#define DGREEN    "\033[1;36m"
#define BLUE      "\033[1;34m"
#define PURPLE    "\033[1;35m"
#define GREEN     "\033[1;32m"
#define YELLOW    "\033[1;33m"
#define RED       "\033[1;31m"
#define CLEAR     "\033[0m"
 
 
enum class Level : int32_t{
    FATAL = 0,
    ERROR = 1,
    WARN  = 2,
    INFO  = 3,
    VERB  = 4,
    DEBUG = 5
};
 
extern Level GLOB_LEAVEL;

// 全局日志级别设置

void SET_LOG_LEVEL(Level level);

void __log_info(Level level, const char* format, ...);
 
 
// 头文件内容放在这里
 
#endif // __LOGGER_HPP__
#include "logger.hpp"


Level GLOB_LEAVEL = Level::INFO;

void SET_LOG_LEVEL(Level level){
    GLOB_LEAVEL = level;

}


void __log_info(Level level, const char* format, ...) {
    char msg[1000];
    va_list args;
    va_start(args, format);
    int n = 0;
 
    switch (level) {
        case Level::DEBUG: n += snprintf(msg + n, sizeof(msg) - n, DGREEN "[DEBUG]" CLEAR); break;
        case Level::VERB:  n += snprintf(msg + n, sizeof(msg) - n, PURPLE "[VERB]" CLEAR); break;
        case Level::INFO:  n += snprintf(msg + n, sizeof(msg) - n, YELLOW "[INFO]" CLEAR); break;
        case Level::WARN:  n += snprintf(msg + n, sizeof(msg) - n, BLUE "[WARN]" CLEAR); break;
        case Level::ERROR: n += snprintf(msg + n, sizeof(msg) - n, RED "[ERROR]" CLEAR); break;
        default:           n += snprintf(msg + n, sizeof(msg) - n, RED "[FATAL]" CLEAR); break;
    }
 
    n += vsnprintf(msg + n, sizeof(msg) - n, format, args);
 
    va_end(args);
 
    if (level <= GLOB_LEAVEL)
        fprintf(stdout, "%s\n", msg);
 
    if (level <= Level::ERROR) {
        fflush(stdout);
        exit(0);
    }
}


使用方式

#include <iostream>
#include "logger.hpp"

int main() {
    
    /* 设置日志级别 */
    SET_LOG_LEVEL(Level::DEBUG);
    
    LOGW("LOG WARNING");
    LOGI("LOG INFO!");
    LOGV("LOG VERBOSE");
    LOGD("LOG DEBUG");
    

    return 0;
}

效果

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐