diff options
Diffstat (limited to 'src/log.c')
| -rw-r--r-- | src/log.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/log.c b/src/log.c new file mode 100644 index 0000000..436307b --- /dev/null +++ b/src/log.c @@ -0,0 +1,61 @@ +#include "log.h" + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> + +#include "err.h" + +FILE *log_file = NULL; + +void +log_init(void) +{ + log_file = fopen(LOG_FILEPATH, "a"); + + if (!log_file) { + die("Faild to open log file"); + } +} + +void +log_write(log_level level, const char *fmt, ...) +{ + char *level_str; + + if (level == LOG_INFO) + level_str = "INFO"; + if (level == LOG_WARN) + level_str = "WARN"; + if (level == LOG_ERR) + level_str = "ERR"; + + time_t rawtime; + struct tm *timeinfo; + char time_str[32]; + + time(&rawtime); + timeinfo = localtime(&rawtime); + strftime(time_str, sizeof(time_str), "%Y-%m-%d %H:%M:%S", timeinfo); + + fprintf(log_file, "[%s] [%s] ", time_str, level_str); + + va_list ap; + va_start(ap, fmt); + vfprintf(log_file, fmt, ap); + va_end(ap); + + fprintf(log_file, "\n"); + fflush(log_file); +} + +void +log_end(FILE *log_file) +{ + if (log_file) { + fclose(log_file); + log_file = NULL; + } +} |
