制作一个Linux下炫酷吊炸天的log输出工具
来源:互联网 发布:it培训机构排名 编辑:程序博客网 时间:2024/06/03 05:51
先看一下最后的效果
先说一下上面打印的内容:
1. 最前面的是log输出的级别,现在有NOTICE、INFO、DEBUG、WARN、ERR 5个log输出等级。
2. 紧接着的是该条log输出的时间,前面的时间是秒,后面的时间是微妙。
3. 然后是这条打印语句所在的文件,函数和行号
4. 然后是具体打印的内容
如何实现
首先看一下其中的一个接口函数dsdl_err
,这是一个可变参数的宏。可以类比一下printf函数,第一个是输出变量的格式,第二个参数是对应变量。
#define dsdl_err(format, args...) \ do {\ if (dsd_log_filter(DSD_ERR)) {\ fprintf(stderr,"\033[31m" "[%s->%s->%d]-> " "\033[0m",__FILE__,__func__,__LINE__);\ fprintf(stderr,"\033[31m" format "\033[0m", ##args);\ }\ }while(0)
参数传递进去后,调用dsd_log_filter
。该函数判断该级别的log是否打开,如果没有打开,则什么都不做。如果打开了,就会打印当前的文件名、函数名、和行号。在打印的格式化输出里面有一个\033[31m
,这就是控制输出某种颜色,\033[0m
清除颜色,更多颜色可查看这里,需自备梯子。
int dsd_log_filter(int filter){ int i = 0; if (log_level & filter) { for (i = 0; i < DSD_COUNT; i++) { if (filter == (1 << i)) { dsd_time_in_microseconds(i); return 1; } } } return 0;}
在dsd_log_filter
函数里面,如果调试打开了,会调用dsd_time_in_microseconds
在输出前面打一个时间戳,该函数如下,简单调用系统的gettimeofday
函数,然后计算出秒数和微妙数。
void dsd_time_in_microseconds(int n){ unsigned long long now; struct timeval tv; gettimeofday(&tv, NULL); now = ((unsigned long long)tv.tv_sec * 1000000LL) + tv.tv_usec; fprintf(stderr, "%s:[%llu:%d]", log_level_names[n], now / 1000000, (int)(now % 1000000));}
至此dsdl_err
就分析完了,其它的log函数都是一样的流程。
总结
一个功能强大,炫酷吊炸天的log就实现了。log有了颜色,腰不酸了,腿不疼了,码起代码来也有劲了。恩,就是这样的。
源码地址
源码点这里
0 0
- 制作一个Linux下炫酷吊炸天的log输出工具
- linux内核的log输出
- Log输出工具类
- Linux 增加dmesg 输出log的大小
- 打印log的一个简单工具类
- 一个高大上的Log工具
- Linux开机Log制作
- 使用Log4PHP作为php项目的log输出工具
- android Log 和 Toast 2个输出工具的应用。
- 简易Java日志(Log)输出工具的封装
- 【Log】一个功能强大的Log封装库包括控制日志输出,保存Log到文件,过滤输出等级。。
- 一个将调试信息输出到控制台的Log函数
- 一个简单的 C++ Log文本输出类
- 一个简单的 C++ Log文本输出类
- 分享自己写的一个简化版LOG输出宏
- 一个小巧的C++Log输出到文件类
- LICEcap 是一个制作gif的工具
- 关于LOG的输出
- selenium2.0报错:stale element reference: element is not attached to the page document的解决办法
- Hdu 4309Seikimatsu Occult Tonneru【最大流Dinic+暴力枚举Dfs+建图】人生难免磕磕碰碰
- HDU 2089 数位DP入门
- 数学公式 —— 向量
- .club域名转移注册商失败的事件(图文)
- 制作一个Linux下炫酷吊炸天的log输出工具
- ruby升级
- Mishka and trip(CF 703B)
- 2016暑期集训4——数据结构(知识点,模板,简单题题解)
- WEB安全之CSRF
- 8月第一个礼拜的记录
- Java.Web学习笔记 Spring4
- 2020 绝对值排序
- MYSQL