https://github.com/rxi/log.c 简单地说,log.c 就是一个 C 语言的日志功能模块。
log_trace(const char *fmt, ...); log_debug(const char *fmt, ...); log_info(const char *fmt, ...); log_warn(const char *fmt, ...); log_error(const char *fmt, ...); log_fatal(const char *fmt, ...); 它们都是对 log_log() 的简单封装,用法和 printf() 一样。示例:下面的例子会将日志同时输出到标准输出和文件中。
#include "log.h" int main(int argc, char *argv[]) { log_set_level(0); log_set_quiet(0); FILE *fp1, *fp2; fp1 = fopen("./log_info.txt", "ab"); if(fp1 == NULL) return -1; fp2 = fopen("./log_debug.txt", "ab"); if(fp2 == NULL) return -1; log_add_fp(fp1, LOG_INFO); log_add_fp(fp2, LOG_DEBUG); log_debug("debug"); log_info("info"); log_warn("warn"); fclose(fp2); fclose(fp1); return 0; } 运行:
$ ./example1 2305 DEBUG example1.c debug 2305 INFO example1.c info 2305 WARN example1.c warn $ cat log_debug.txt 2022-05-08 2305 DEBUG example1.c debug 2022-05-08 2305 INFO example1.c info 2022-05-08 2305 WARN example1.c warn $ cat log_info.txt 2022-05-08 2305 INFO example1.c info 2022-05-08 2305 WARN example1.c warn 关于线程安全:log.c 代码虽然少,但是仍然考虑了线程安全,下面是用法示例。
#include "log.h" pthread_mutex_t MUTEX_LOG; void log_lock(bool lock, void *udata); int main() { log_set_level(0); log_set_quiet(0); pthread_mutex_init(&MUTEX_LOG, NULL); log_set_lock(log_lock, &MUTEX_LOG); /* Insert threaded application code here... */ log_info("I'm threadsafe"); pthread_mutex_destroy(&MUTEX_LOG); return 0; } void log_lock(bool lock, void* udata) { pthread_mutex_t *LOCK = (pthread_mutex_t*)(udata); if (lock) pthread_mutex_lock(LOCK); else pthread_mutex_unlock(LOCK); }
typedef void (*log_LockFn)(bool lock, void *udata); 用户可以用它来指定自己想用的锁机制,例如 Pthread 的互斥量。int level 用于保存当前的 log 等级,等级大于 level 的 log 才会被输出到标准输出。bool quiet 用于打开、关闭 log 输出。数组 callbacks 用于保存多种输出方式,目前仅支持输出到标准输出和文件,有需要的话我们还可以将其扩展成输出到 syslog、网络等,每增加一种输出方式就是构造一个 Callback,成员回调函数 log_LogFn 负责真正地 log 输出功能:
typedef void (*log_LogFn)(log_Event *ev); 公共数据结构:
审核编辑 :李倩
全部0条评论
快来发表一下你的评论吧 !