aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--log.c57
-rw-r--r--log.h16
2 files changed, 73 insertions, 0 deletions
diff --git a/log.c b/log.c
new file mode 100644
index 0000000..305a666
--- /dev/null
+++ b/log.c
@@ -0,0 +1,57 @@
+#include "log.h"
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+#include "err.h"
+#include "utils.h"
+
+FILE* log_file = NULL;
+
+void log_init(void) {
+ if (is_debug()) {
+ log_file = fopen("./log", "a");
+ } else {
+ 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;
+ }
+}
diff --git a/log.h b/log.h
new file mode 100644
index 0000000..e95039f
--- /dev/null
+++ b/log.h
@@ -0,0 +1,16 @@
+#ifndef SS_LOG_H
+#define SS_LOG_H
+
+#define LOG_FILEPATH "./log"
+
+typedef enum {
+ LOG_INFO,
+ LOG_WARN,
+ LOG_ERR,
+} log_level;
+
+void log_init(void);
+
+void log_write(log_level level, const char* fmt, ...);
+
+#endif /* SS_LOG_H */