#include "log.h"
#include <stdio.h>
#include <stdarg.h>
#define _LOG_LEVEL_NAME(ll) case LOG_ ## ll: return #ll;
const char *log_level_name (enum log_level level)
{
switch (level) {
_LOG_LEVEL_NAME(DEBUG)
_LOG_LEVEL_NAME(INFO)
_LOG_LEVEL_NAME(WARN)
_LOG_LEVEL_NAME(ERROR)
_LOG_LEVEL_NAME(FATAL)
default: return "???";
}
}
/*
* Output the "[TYPE] FUNC: " header
*/
void _log_header (enum log_level level, const char *func)
{
printf("[%5s] %s: ", log_level_name(level), func);
}
void log_msg (enum log_level level, const char *func, const char *format, ...)
{
va_list vargs;
_log_header(level, func);
// formatted output
va_start(vargs, format);
vprintf(format, vargs);
va_end(vargs);
// newline
printf("\n");
}
void _log_err (err_t err, const char *func, const char *format, ...)
{
va_list vargs;
// header
_log_header(LOG_ERROR, func);
// formatted output
va_start(vargs, format);
vprintf(format, vargs);
va_end(vargs);
// err_code and newline
printf(": %s\n", error_name(err));
}
void _log_err_info (struct error_info *err, const char *func, const char *format, ...)
{
va_list vargs;
// header
_log_header(LOG_ERROR, func);
// formatted output
va_start(vargs, format);
vprintf(format, vargs);
va_end(vargs);
// err_code and newline
printf(": %s\n", error_msg(err));
}