linux c 自定义 printf函数 打印log

linux c 自定义 printf函数 打印log

bio_print_debug("%s start\n",__func__);
int bio_print_debug(const char *format, ...);
int bio_print_debug(const char * format, ...)
{
	int ret = 0;
	va_list args;

	va_start(args, format);
	ret = bio_vprint_by_level(BIO_PRINT_LEVEL_DEBUG, stdout, format, args);
	va_end(args);

	return ret;
}

int bio_vprint_by_level(int print_level, FILE * __restrict stream,
						const char * __restrict format, va_list args)
{
	int ret = 0;
	int level_int = 0;
	char * level_char = getenv(BIO_PRINT_LEVEL_ENV);

	if (level_char == NULL)
	{
		level_int = BIO_PRINT_LEVEL_DEFAULT;
	} else {
		level_int = atoi(level_char);
	}

	if (print_level <= level_int)
	{
		char * color_char = getenv(BIO_PRINT_LEVEL_COLOR);
		int color_int = 0;

		if (color_char != NULL)
			color_int = atoi(color_char);

		if (color_int == 1)
		{
			switch (print_level)
			{
			case BIO_PRINT_LEVEL_EMERG:
			case BIO_PRINT_LEVEL_ALERT:
			case BIO_PRINT_LEVEL_CRIT:
			case BIO_PRINT_LEVEL_ERROR:
				fprintf(stderr, "%s", BIO_PRINT_COLOR_RED);
				break;
			case BIO_PRINT_LEVEL_WARN:
				fprintf(stdout, "%s", BIO_PRINT_COLOR_PURPLE);
				break;
			case BIO_PRINT_LEVEL_NOTICE:
				fprintf(stdout, "%s", BIO_PRINT_COLOR_BLUE);
				break;
			case BIO_PRINT_LEVEL_INFO:
				fprintf(stdout, "%s", BIO_PRINT_COLOR_CYAN);
				break;
			case BIO_PRINT_LEVEL_DEBUG:
				fprintf(stdout, "%s", BIO_PRINT_COLOR_YELLOW);
				break;
			default:
				fprintf(stdout, "%s", BIO_PRINT_COLOR_WHITE);
			}
		}

		switch (print_level)
		{
		case BIO_PRINT_LEVEL_EMERG:
			fprintf(stderr, "[EMERG] ");
			break;
		case BIO_PRINT_LEVEL_ALERT:
			fprintf(stderr, "[ALERT] ");
			break;
		case BIO_PRINT_LEVEL_CRIT:
			fprintf(stderr, "[ CRIT] ");
			break;
		case BIO_PRINT_LEVEL_ERROR:
			fprintf(stderr, "[ERROR] ");
			break;
		case BIO_PRINT_LEVEL_WARN:
			fprintf(stdout, "[ WARN] ");
			break;
		case BIO_PRINT_LEVEL_NOTICE:
			fprintf(stdout, "[ NOTE] ");
			break;
		case BIO_PRINT_LEVEL_INFO:
			fprintf(stdout, "[ INFO] ");
			break;
		case BIO_PRINT_LEVEL_DEBUG:
			fprintf(stdout, "[DEBUG] ");
			break;
		default:
			fprintf(stdout, "[UKNOW] ");
		}

		ret = vfprintf(stream, format, args);

		if (color_int == 1)
		{
			if (print_level <= BIO_PRINT_LEVEL_ERROR && print_level >= 0)
				fprintf(stderr, "%s", BIO_PRINT_COLOR_END);
			else
				fprintf(stdout, "%s", BIO_PRINT_COLOR_END);
		}
	}

	fflush(stream);

	return ret;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值