diff options
Diffstat (limited to 'src/log.c')
| -rw-r--r-- | src/log.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/log.c b/src/log.c new file mode 100644 index 0000000..616803f --- /dev/null +++ b/src/log.c @@ -0,0 +1,45 @@ +#include "log.h" + +#include <stdarg.h> +#include <stdio.h> +#include <string.h> +#include <time.h> + +#include "util.h" + +static int g_level = LOG_INFO; + +void log_set_level(int level) +{ + g_level = level; +} + +int log_level_from_name(const char *name) +{ + if (!name) + return LOG_INFO; + if (strcmp(name, "error") == 0) + return LOG_ERROR; + if (strcmp(name, "warn") == 0) + return LOG_WARN; + if (strcmp(name, "info") == 0) + return LOG_INFO; + if (strcmp(name, "debug") == 0) + return LOG_DEBUG; + return LOG_INFO; +} + +void log_msg(int level, const char *fmt, ...) +{ + if (level > g_level) + return; + static const char *names[] = { "error", "warn", "info", "debug" }; + char ts[32]; + util_iso8601(util_now(), ts, sizeof ts); + fprintf(stderr, "%s [%s] ", ts, names[level]); + va_list ap; + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + fputc('\n', stderr); +} |
