diff --git a/include/common.h b/include/common.h index 89562ee..d870a4e 100644 --- a/include/common.h +++ b/include/common.h @@ -1,7 +1,7 @@ #ifndef COMMON_H_ #define COMMON_H_ -#define VERSION "1.0.0-beta" +#define VERSION "1.0.1-beta" #define RANDOM_PORT_START 41952 #define RANDOM_PORT_END 65535 diff --git a/include/utils/logger.h b/include/utils/logger.h index 47f3b6d..ca0415b 100644 --- a/include/utils/logger.h +++ b/include/utils/logger.h @@ -1,5 +1,7 @@ -#ifndef LOG_H -#define LOG_H +#ifndef LOGGER_H_ +#define LOGGER_H_ + +#define LOG_PREFIX "Bootstrap" enum { LOG_DEBUG, @@ -16,7 +18,7 @@ enum { #define log_fatal(...) log_printf(LOG_FATAL, __VA_ARGS__) extern int LOG_LEVEL; -void log_perror(char *prefix); +void log_perror(const char *fmt, ...); void log_printf(int level, const char *fmt, ...); #endif diff --git a/src/utils/logger.c b/src/utils/logger.c index 73b68b5..afdd29c 100644 --- a/src/utils/logger.c +++ b/src/utils/logger.c @@ -2,6 +2,7 @@ #include #include #include +#include #include "logger.h" int LOG_LEVEL = LOG_INFO; // default log level @@ -22,36 +23,40 @@ static const char *log_color[] = { "\x1b[95m", // fatal }; +void fprint_prefix() { // print log prefix and time info + time_t _time; + time(&_time); + struct timeval tv; + gettimeofday(&tv, NULL); + struct tm *t = localtime(&_time); + fprintf(stderr, "\x1b[36m[%s]\x1b[0m", LOG_PREFIX); + fprintf(stderr, " \x1b[90m%04d-%02d-%02d", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday); + fprintf(stderr, " %02d:%02d:%02d.%03ld\x1b[0m", t->tm_hour, t->tm_min, t->tm_sec, tv.tv_usec / 1000); +} + void log_printf(int level, const char *fmt, ...) { if (level < LOG_LEVEL) { // skip low log level return; } - time_t t = time(NULL); - char time_str[20]; // YYYY-mm-dd HH:MM:SS (20 bytes) - time_str[strftime(time_str, 20, "%Y-%m-%d %H:%M:%S", localtime(&t))] = '\0'; // generate time str - va_list ap; va_start(ap, fmt); - fprintf(stderr, "\x1b[36m[Bootstrap]\x1b[0m \x1b[90m%s\x1b[0m", time_str); // show log prefix + fprint_prefix(); fprintf(stderr, " %s%s\x1b[0m ", log_color[level], log_string[level]); // show log level vfprintf(stderr, fmt, ap); // output log content fprintf(stderr, "\n"); // add LF after line fflush(stderr); va_end(ap); - if (level == LOG_FATAL) { exit(1); } } -void log_perror(char *prefix) { - time_t t; - time(&t); - struct tm *lt = localtime(&t); - fprintf(stderr, "\x1b[36m[Bootstrap]\x1b[0m "); - fprintf(stderr, "\x1b[90m%04d-%02d-%02d %02d:%02d:%02d\x1b[0m", - lt->tm_year + 1900, lt->tm_mon, lt->tm_mday, lt->tm_hour, lt->tm_min, lt->tm_sec); - fprintf(stderr, " %s%s\x1b[0m ", log_color[3], log_string[3]); // error level +void log_perror(const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + fprint_prefix(); + fprintf(stderr, " %s%s\x1b[0m ", log_color[LOG_ERROR], log_string[LOG_ERROR]); + vfprintf(stderr, fmt, ap); // output log content fflush(stderr); - perror(prefix); + perror(""); }