diff --git a/src/zm_logger.cpp b/src/zm_logger.cpp index 266342ae4..580043488 100644 --- a/src/zm_logger.cpp +++ b/src/zm_logger.cpp @@ -20,10 +20,10 @@ #include "zm_logger.h" #include "zm_db.h" +#include "zm_time.h" #include "zm_utils.h" #include #include -#include #include #ifdef __FreeBSD__ @@ -425,30 +425,20 @@ void Logger::logPrint(bool hex, const char *filepath, int line, int level, const char timeString[64]; char logString[4096]; // SQL TEXT can hold 64k so we could go up to 32k here but why? va_list argPtr; - struct timeval timeVal; const char *base = strrchr(filepath, '/'); const char *file = base ? base+1 : filepath; const char *classString = smCodes[level].c_str(); - gettimeofday(&timeVal, nullptr); + SystemTimePoint now = std::chrono::system_clock::now(); + time_t now_sec = std::chrono::system_clock::to_time_t(now); + Microseconds now_frac = std::chrono::duration_cast( + now.time_since_epoch() - std::chrono::duration_cast(now.time_since_epoch())); -#if 0 - if ( logRuntime ) { - static struct timeval logStart; - - subtractTime( &timeVal, &logStart ); - - snprintf( timeString, sizeof(timeString), "%ld.%03ld", timeVal.tv_sec, timeVal.tv_usec/1000 ); - } else { -#endif - char *timePtr = timeString; - tm now_tm = {}; - timePtr += strftime(timePtr, sizeof(timeString), "%x %H:%M:%S", localtime_r(&timeVal.tv_sec, &now_tm)); - snprintf(timePtr, sizeof(timeString)-(timePtr-timeString), ".%06ld", timeVal.tv_usec); -#if 0 - } -#endif + char *timePtr = timeString; + tm now_tm = {}; + timePtr += strftime(timePtr, sizeof(timeString), "%x %H:%M:%S", localtime_r(&now_sec, &now_tm)); + snprintf(timePtr, sizeof(timeString) - (timePtr - timeString), ".%06" PRIi64, static_cast(now_frac.count())); pid_t tid; #ifdef __FreeBSD__ @@ -539,8 +529,8 @@ void Logger::logPrint(bool hex, const char *filepath, int line, int level, const "( `TimeKey`, `Component`, `ServerId`, `Pid`, `Level`, `Code`, `Message`, `File`, `Line` )" " VALUES " "( %ld.%06ld, '%s', %d, %d, %d, '%s', '%s', '%s', %d )", - timeVal.tv_sec, timeVal.tv_usec, mId.c_str(), staticConfig.SERVER_ID, tid, level, classString, escapedString.c_str(), file, line - ); + now_sec, now_frac.count(), mId.c_str(), staticConfig.SERVER_ID, tid, level, classString, + escapedString.c_str(), file, line); dbQueue.push(std::move(sql_string)); } else { puts("Db is closed");