linux c 下,使用不同的颜色打印log信息

更多颜色及操作说明:通过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(为了解决终端颜色不正常的状况),并正常结束进程。

效果如下图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值