更多颜色及操作说明:通过printf设置Linux终端输出的颜色和显示方式
【Linux + C语言】让你的printf多姿多彩,让你的日志打印高效快捷 —— printf带颜色打印输出
主要的操作为,封装一层打印相关的函数。为一个头文件:
#ifndef _LOCAL_LOG_H_
#define _LOCAL_LOG_H_
#include <stdio.h>
/* 宏对定义的先后顺序没有要求 */
/* 当前文件定义的打印等级 */
#define LOCAL_PRINT_LEVEL LOCAL_DEBUG
#define LOCAL_DEBUG 9
#define LOCAL_INFO 7
#define LOCAL_WARNING 5
#define LOCAL_ERROR 3
#define LOCAL_CRITICAL 1
/* 红色对应 CRITICAL 与 ERROR log
* 黄色对应 WARNING log
* 绿色对应 INFO log
* 蓝色对应 DEBUG log
*/
#define LOCAL_RED "\033[31;1m"
#define LOCAL_YELLOW "\033[0;33m"
#define LOCAL_GREEN "\033[0;32m"
#define LOCAL_BULE "\033[0;34m"
#define LOCAL_END "\033[0m"
#define print_debug(...) do { \
SWITCH_PRINT(LOCAL_DEBUG, __VA_ARGS__); \
} while(0)
#define print_info(...) do { \
SWITCH_PRINT(LOCAL_INFO, __VA_ARGS__); \
} while(0)
#define print_warning(...) do { \
SWITCH_PRINT(LOCAL_WARNING, __VA_ARGS__); \
} while(0)
#define print_error(...) do { \
SWITCH_PRINT(LOCAL_ERROR, __VA_ARGS__); \
} while(0)
#define print_critical(...) do { \
SWITCH_PRINT(LOCAL_CRITICAL, __VA_ARGS__); \
} while(0)
#define SWITCH_PRINT(fmt, ...) do { \
if (fmt <= LOCAL_PRINT_LEVEL) { \
switch (fmt) { \
case LOCAL_DEBUG: \
printf(LOCAL_BULE); \
break; \
case LOCAL_INFO: \
printf(LOCAL_GREEN); \
break; \
case LOCAL_WARNING: \
printf(LOCAL_YELLOW); \
break; \
case LOCAL_ERROR: \
case LOCAL_CRITICAL: \
printf(LOCAL_RED); \
break; \
default: \
break;\
} \
printf(__VA_ARGS__); \
printf(LOCAL_END); \
} \
} while(0)
#endif //_LOCAL_LOG_H_
应用调用如下:
#include "local_log.h"
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
void signal_stop(int signal)
{
fflush(stdout);
exit(0);
}
int main(int argc, char const *argv[])
{
signal(SIGINT, signal_stop);
while (1) {
printf("start\n");
print_debug("print_debug \n");
sleep(1);
print_info("print_info %d\n", 1);
sleep(1);
print_warning("print_warning %d\n", 1);
sleep(1);
print_error("print_error %d\n", 1);
sleep(1);
print_critical("print_critical %s %s %d\n", "hello", "world",1);
printf("end\n");
sleep(1);
}
return 0;
}
捕捉SIGINT 信号的目的是为了能够刷新一下stdout(为了解决终端颜色不正常的状况),并正常结束进程。
效果如下图: