#include <stdio.h>
#include <string.h>
#include <stdarg.h>
typedef enum {
LOG_LEVEL_ERROR = 0,
LOG_LEVEL_WARNING = 1,
LOG_LEVEL_INFO = 2,
} log_level;
#define SIZE 16000
void log_out(log_level levelno, const char* message, ...) {
const char* levelstr[3] = {"[ERROR]: ", "[WARNING]: ", "[INFO]: "};
char _message[SIZE] = "";
__builtin_va_list arg_ptr;
va_start(arg_ptr, message);
vsnprintf(_message, SIZE, message, arg_ptr);
va_end(arg_ptr);
char out_message[SIZE * 2];
sprintf(out_message, "%s%s\n", levelstr[levelno], _message);
printf("%s", out_message);
}
int main(void)
{
log_out(LOG_LEVEL_ERROR, "message: '%s', in file: %s, line: %d\n", "Your error message", __FILE__, __LINE__);
log_out(LOG_LEVEL_WARNING, "message: '%s', in file: %s, line: %d\n", "Your warning message", __FILE__, __LINE__);
log_out(LOG_LEVEL_INFO, "message: '%s', in file: %s, line: %d\n", "Your info message", __FILE__, __LINE__);
return 0;
}
/*
run:
[ERROR]: message: 'Your error message', in file: main.c, line: 30
[WARNING]: message: 'Your warning message', in file: main.c, line: 31
[INFO]: message: 'Your info message', in file: main.c, line: 32
*/