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;
}