如何创建类似printf变量的参数

我正在寻找为我的日志记录实现api like printf。 它应该类似于调用printf。 例如:

persistent_log(LogType0, "This is buffered writing %d", i); 

我查看了变量参数的内容,但似乎我需要知道那里的参数的数量和类型。 所以我需要在这方面提供更多帮助。

这是我发现的一个过去项目的摘录,对我来说效果很好。 当然缺少一些初始化步骤。 这里的关键是vfprintf函数,它将处理打印各种参数的细节。

 void _proxy_log(log_level_t level, const char *fmt, ...) __attribute__((format (printf, 2, 3))); #define proxy_log(level, fmt, ...) _proxy_log(level, fmt"\n", ##__VA_ARGS__) void _proxy_log(log_level_t level, const char *fmt, ...) { va_list arg; FILE *log_file = (level == LOG_ERROR) ? err_log : info_log; /* Check if the message should be logged */ if (level > log_level) return; /* Write the error message */ va_start(arg, fmt); vfprintf(log_file, fmt, arg); va_end(arg); #ifdef DEBUG fflush(log_file); fsync(fileno(log_file)); #endif }