一个极其简陋的C/C++日志工具
来源:互联网 发布:国乐joker知乎 编辑:程序博客网 时间:2024/06/05 09:50
总用printf来打日志的话,到后面删除起来太麻烦,所以自己写了几个函数来代替printf。其实也就是把printf包装了一下,然后利用宏根据编译选项是否含有-DDEBUG来判断是否把宏展开为功能代码。代码如下:
//log.h#ifndef LOG_H_INCLUDED#define LOG_H_INCLUDED#include <stdio.h>#include <string.h>#include <stdarg.h>#ifdef DEBUG#define INFO(...) info(__VA_ARGS__)#define WARN(...) warn(__VA_ARGS__)#define ERROR(...) error(__VA_ARGS__)#else#define INFO(...) {}#define WARN(...) {}#define ERROR(...) {}#endifextern const char *_log_blue;extern const char *_log_yellow;extern const char *_log_red;extern const char *_log_clear;extern void info(const char *fmt, ...);extern void warn(const char *fmt, ...);extern void error(const char *fmt, ...);#endif // LOG_H_INCLUDED
//log.c#include "log.h"const char *_log_blue = "\033[34m"; //color for infoconst char *_log_yellow = "\033[33m"; //color for warnconst char *_log_red = "\033[31m"; //color for errorconst char *_log_clear = "\033[0m"; //color for normalvoid info(const char *fmt, ...){ char fullfmt[strlen(fmt) + 30]; strcpy(fullfmt, _log_blue); strcat(fullfmt, "[INFO] "); strcat(fullfmt, fmt); strcat(fullfmt, _log_clear); strcat(fullfmt, "\n"); va_list ap; va_start(ap, fmt); vfprintf(stderr, fullfmt, ap); va_end(ap);}void warn(const char *fmt, ...){ char fullfmt[strlen(fmt) + 30]; strcpy(fullfmt, _log_yellow); strcat(fullfmt, "[WARN] "); strcat(fullfmt, fmt); strcat(fullfmt, _log_clear); strcat(fullfmt, "\n"); va_list ap; va_start(ap, fmt); vfprintf(stderr, fullfmt, ap); va_end(ap);}void error(const char *fmt, ...){ char fullfmt[strlen(fmt) + 30]; strcpy(fullfmt, _log_red); strcat(fullfmt, "[ERROR] "); strcat(fullfmt, fmt); strcat(fullfmt, _log_clear); strcat(fullfmt, "\n"); va_list ap; va_start(ap, fmt); vfprintf(stderr, fullfmt, ap); va_end(ap);}
如果编译选项有-DDEBUG,则INFO会展开为info(),否则展开为空大括号,这些日志函数的用法和一般的printf没什么区别,唯一的区别也就是加了颜色和前缀。
虽然写了三个不同级别的日志函数,但是目前并没有实现对日志级别的过滤,也没有实现输出到文件,如果需要的话再加了。
0 0
- 一个极其简陋的C/C++日志工具
- 请教各位C/VC高手一个极其郁闷的问题
- C语言:极简陋的井字棋
- C 简陋自动汉诺塔
- 贴一个刚写的 词法解析程序吧(C语言),很简陋,呵呵。。。
- 一个简陋的makefile
- 基于OpenGL的C版贪食蛇(简陋版)
- c语言日志工具-zlog的使用
- C# 简陋的远程工具
- 日志类(常用的都是用log4net,这里简陋地实现一个写入文本日志类)
- 一个简陋的文字计数器
- 极其轻松的一个星期
- 一个非常简陋的域名注册辅助工具
- 一个简陋的中文自动分词程序
- 一个简陋的lua调试器
- 实现一个简陋的MVC框架
- 实现一个简陋的双向绑定
- 一个比较简陋的动态标题栏
- Java - JFrame 设置背景图片
- 跑马灯实验-寄存器版
- Android Dev 进程与线程 学习
- 180中国跳棋(12)186(13)191(14)196(15)201(16)205(17)209.5(18)
- Android 横竖屏切换总结
- 一个极其简陋的C/C++日志工具
- Linux Socket过程详细解释(包括三次握手建立连接,四次握手断开连接)
- 用基本的文字元素标记内容
- servletResponse
- css盒子模型
- LeetCode 413. Arithmetic Slices
- Ubuntu+QT+Cuda7.5+OPENGL配置
- POJ 3087 - STL(map)+滚动数组
- 消息机制与异步任务