头文件定义
#ifndef __UTILS_HPP__
#define __UTILS_HPP__
#include <stdio.h>
#include <stdarg.h>
// Logging 日志打印
#define LOG(...) __log_info(Level::INFO, __VA_ARGS__) // 默认级别为INFO
#define LOGV(...) __log_info(Level::VERB, __VA_ARGS__) // 默认级别为VERB
#define LOGE(...) __log_info(Level::ERROR, __VA_ARGS__) // 默认级别为ERROR
// 定义颜色宏
#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"
// Level是一个枚举类型
enum Level { INFO, VERB, ERROR };
// 日志函数实现
static void __log_info(Level level, const char* format, ...) {
char msg[1000];
va_list args;
va_start(args, format);
int n = 0;
if (level == Level::INFO) {
n += snprintf(msg + n, sizeof(msg) - n, YELLOW "[info]:");
} else if (level == Level::VERB) {
n += snprintf(msg + n, sizeof(msg) - n, PURPLE "[verb]:" CLEAR);
} else {
n += snprintf(msg + n, sizeof(msg) - n, RED "[error]:");
}
n += vsnprintf(msg + n, sizeof(msg) - n, format, args);
fprintf(stdout, "%s\n", msg);
va_end(args);
}
#endif //__UTILS_HPP__
使用方式
#include "utils.hpp"
int main() {
// 输出不同类型的日志信息
LOG("这是一个信息日志");
LOGV("这是一个详细信息日志");
LOGE("这是一个错误日志");
LOG("这是%s信息日志%s,%s,%s", "一个", "参数", "日志", "输出");
return 0;
}
效果
