2.4 KiB
2.4 KiB
Log for C
基于C23的日志库,支持自动类型识别、格式化输出、颜色格式化输出和日志等级格式化输出
功能说明
使用C11的 _Generic特性实现类型自动识别和格式化输出
log() - 基础日志输出
自动判断传入参数类型并输出,支持格式化字符串
支持的参数类型:
bool- 布尔(要求编译器必须支持C23标准)int/long/long long- 整数float/double/long double- 浮点数char- 字符char*/const char*- 字符串wchar_t*/const wchar_t*- 宽字符串
注意: C语言中字符字面量(如
'A')的类型是int,会被当作整数打印。如需打印字符,请使用char类型变量或显式转换(char)'A'
格式化字符串使用 {}作为占位符,会自动替换为对应参数的值。支持最多10个格式化变量参数
clog() / clog_f() - 颜色输出 / 颜色格式化输出
输出带颜色的日志信息(支持格式化)
参数:
color- 颜色名称message- 消息内容format- 格式化字符串(clog_f)
支持的颜色:
red, green, yellow, blue, magenta, cyan, white, gray
日志等级输出 / 日志等级格式化输出
带时间戳和颜色的分级日志
无格式化版本:
logerr(message)- 错误日志(红色)logok(message)- 成功日志(绿色)loginfo(message)- 信息日志(青色)logwarn(message)- 警告日志(黄色)logdebug(message)- 调试日志(灰色)
格式化版本: logerr_f()、logok_f()、loginfo_f()、logwarn_f()、logdebug_f()(支持 {} 占位符)
格式:[时间 LEVEL] 消息
使用示例
#include "log.h"
int main() {
int age = 18;
float height = 1.75;
char name[] = "小明";
log("hello");
log(age);
log(height);
log(true);
log("姓名: {},年龄: {}岁,身高: {}米", name, age, height);
clog("green", "成功");
clog_f("red", "错误代码: {}", 404);
logerr("MySQL连接失败");
logok_f("用户 {} 登录成功", "admin");
loginfo_f("处理了 {} 条记录", 100);
logwarn_f("内存使用: {}%", 85.5);
logdebug("调试信息");
return 0;
}
编译
gcc -std=c23 -o main test.c log.c
推荐GCC 13+或其他支持C23标准的编译器,其他版本未测试,可行性不明