X-Git-Url: https://git.sesse.net/?p=cubemap;a=blobdiff_plain;f=log.cpp;h=d481cc43496a3ab962b6f7c19239bcaf471c21b7;hp=ba05a64d1fe5236c4dfe370a947254587c56cf37;hb=74cd48ffef90d7d0752e37a4515e4ecfb68f7c9d;hpb=3ce04a3c410c5836394417b19e70f2a95bc8a5e7 diff --git a/log.cpp b/log.cpp index ba05a64..d481cc4 100644 --- a/log.cpp +++ b/log.cpp @@ -1,12 +1,15 @@ -#include "log.h" - -#include +#include +#include #include +#include +#include +#include #include -#include #include #include +#include "log.h" + using namespace std; // Yes, it's a bit ugly. @@ -65,16 +68,22 @@ void log(LogLevel log_level, const char *fmt, ...) vsnprintf(formatted_msg, sizeof(formatted_msg), fmt, ap); va_end(ap); + time_t now = time(NULL); + struct tm lt; + struct tm *ltime = localtime_r(&now, <); + char timestamp[1024]; + if (ltime == NULL) { + strcpy(timestamp, "???"); + } else { + strftime(timestamp, sizeof(timestamp), "%a, %d %b %Y %T %z", ltime); + } + const char *log_level_str; int syslog_level; switch (log_level) { - case NO_LEVEL: - log_level_str = ""; - syslog_level = LOG_INFO; - break; case INFO: - log_level_str = "INFO: "; + log_level_str = "INFO: "; syslog_level = LOG_INFO; break; case WARNING: @@ -82,7 +91,7 @@ void log(LogLevel log_level, const char *fmt, ...) syslog_level = LOG_WARNING; break; case ERROR: - log_level_str = "ERROR: "; + log_level_str = "ERROR: "; syslog_level = LOG_ERR; break; default: @@ -92,7 +101,7 @@ void log(LogLevel log_level, const char *fmt, ...) // Log to stderr if logging hasn't been set up yet. Note that this means // that such messages will come even if there are no “error_log” lines. if (!logging_started) { - fprintf(stderr, "%s%s\n", log_level_str, formatted_msg); + fprintf(stderr, "[%s] %s%s\n", timestamp, log_level_str, formatted_msg); return; } @@ -100,7 +109,7 @@ void log(LogLevel log_level, const char *fmt, ...) if (log_destinations[i] == SYSLOG_FAKE_FILE) { syslog(syslog_level, "%s", formatted_msg); } else { - int err = fprintf(log_destinations[i], "%s%s\n", log_level_str, formatted_msg); + int err = fprintf(log_destinations[i], "[%s] %s%s\n", timestamp, log_level_str, formatted_msg); if (err < 0) { perror("fprintf"); } @@ -110,3 +119,9 @@ void log(LogLevel log_level, const char *fmt, ...) } } } + +void log_perror(const char *msg) +{ + char errbuf[4096]; + log(ERROR, "%s: %s", msg, strerror_r(errno, errbuf, sizeof(errbuf))); +}