diff --git a/include/spdlog/common.h b/include/spdlog/common.h index c9076e98..a75f9c6a 100644 --- a/include/spdlog/common.h +++ b/include/spdlog/common.h @@ -36,6 +36,14 @@ #define SPDLOG_NOEXCEPT #endif +// under linux, use the much faster CLOCK_REALTIME_COARSE clock. +// this clock is less accurate - resolution is 1ms under i386 and x86_64. +// comment to use the regular (and slower) clock + +#ifdef __linux__ +#define SPDLOG_CLOCK_COARSE +#endif + namespace spdlog { diff --git a/include/spdlog/details/line_logger.h b/include/spdlog/details/line_logger.h index 05db2633..fa616fcf 100644 --- a/include/spdlog/details/line_logger.h +++ b/include/spdlog/details/line_logger.h @@ -26,9 +26,6 @@ #include #include "../common.h" #include "../logger.h" -#ifdef SPDLOG_CLOCK_COARSE -#include -#endif // Line logger class - aggregates operator<< calls to fast ostream @@ -67,15 +64,7 @@ public: if (_enabled) { _log_msg.logger_name = _callback_logger->name(); -#ifndef SPDLOG_CLOCK_COARSE - _log_msg.time = log_clock::now(); -#else - timespec ts; - ::clock_gettime(CLOCK_REALTIME_COARSE, &ts); - _log_msg.time = std::chrono::time_point( - std::chrono::duration_cast( - std::chrono::seconds(ts.tv_sec) + std::chrono::nanoseconds(ts.tv_nsec))); -#endif + _log_msg.time = os::now(); _callback_logger->_log_msg(_log_msg); } } @@ -83,7 +72,7 @@ public: // // Support for format string with variadic args // - + void write(const char* what) { @@ -106,7 +95,7 @@ public: } } - + // // Support for operator<< // @@ -194,7 +183,7 @@ public: _log_msg.raw << what; return *this; } - + //Support user types which implements operator<< template line_logger& operator<<(const T& what) @@ -204,7 +193,7 @@ public: return *this; } - + void disable() { _enabled = false; diff --git a/include/spdlog/details/os.h b/include/spdlog/details/os.h index ee093b89..a55e4f85 100644 --- a/include/spdlog/details/os.h +++ b/include/spdlog/details/os.h @@ -23,7 +23,6 @@ /*************************************************************************/ #pragma once - #include #include #include @@ -35,6 +34,8 @@ # include #endif +#include "..\common.h" + namespace spdlog { namespace details @@ -42,6 +43,21 @@ namespace details namespace os { +inline spdlog::log_clock::time_point now() +{ + +#ifdef SPDLOG_CLOCK_COARSE + timespec ts; + ::clock_gettime(CLOCK_REALTIME_COARSE, &ts); + return std::chrono::time_point( + std::chrono::duration_cast( + std::chrono::seconds(ts.tv_sec) + std::chrono::nanoseconds(ts.tv_nsec))); + +#else + return log_clock::now(); +#endif + +} inline std::tm localtime(const std::time_t &time_tt) {