Cómo crear una función como argumento variable printf

Estaba buscando implementar una API como printf para mi registro. Debe ser similar a llamar a printf. Por ejemplo:

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

Miré las cosas de los argumentos variables, pero parece que necesito saber la cantidad y el tipo de argumentos allí. así que necesito más ayuda en ese sentido.

Aquí hay un extracto de un proyecto pasado que encontré que funciona bien para mí. Por supuesto, faltan algunos pasos de inicialización. La clave aquí es la función vfprintf que manejará los detalles de impresión de los diversos argumentos.

 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 }