From 6cc7e7382ecd09d49175fd8feffd8f7ad973d12f Mon Sep 17 00:00:00 2001 From: gabime Date: Sun, 21 May 2017 01:56:56 +0300 Subject: [PATCH] astyle --- include/spdlog/details/async_log_helper.h | 16 +- include/spdlog/details/log_msg.h | 8 +- include/spdlog/details/logger_impl.h | 5 +- include/spdlog/details/os.h | 502 +++++++++++----------- include/spdlog/details/spdlog_impl.h | 4 +- include/spdlog/sinks/ansicolor_sink.h | 142 +++--- include/spdlog/tweakme.h | 2 +- 7 files changed, 343 insertions(+), 336 deletions(-) diff --git a/include/spdlog/details/async_log_helper.h b/include/spdlog/details/async_log_helper.h index 70b18555..8aa42882 100644 --- a/include/spdlog/details/async_log_helper.h +++ b/include/spdlog/details/async_log_helper.h @@ -57,14 +57,14 @@ class async_log_helper ~async_msg() = default; - async_msg(async_msg&& other) SPDLOG_NOEXCEPT: - logger_name(std::move(other.logger_name)), - level(std::move(other.level)), - time(std::move(other.time)), - thread_id(other.thread_id), - txt(std::move(other.txt)), - msg_type(std::move(other.msg_type)), - msg_id(other.msg_id) +async_msg(async_msg&& other) SPDLOG_NOEXCEPT: + logger_name(std::move(other.logger_name)), + level(std::move(other.level)), + time(std::move(other.time)), + thread_id(other.thread_id), + txt(std::move(other.txt)), + msg_type(std::move(other.msg_type)), + msg_id(other.msg_id) {} async_msg(async_msg_type m_type): diff --git a/include/spdlog/details/log_msg.h b/include/spdlog/details/log_msg.h index 5a24e639..44ab5790 100644 --- a/include/spdlog/details/log_msg.h +++ b/include/spdlog/details/log_msg.h @@ -19,10 +19,10 @@ namespace details struct log_msg { log_msg() = default; - log_msg(const std::string *loggers_name, level::level_enum lvl) : - logger_name(loggers_name), - level(lvl), - msg_id(0) + log_msg(const std::string *loggers_name, level::level_enum lvl) : + logger_name(loggers_name), + level(lvl), + msg_id(0) { #ifndef SPDLOG_NO_DATETIME time = os::now(); diff --git a/include/spdlog/details/logger_impl.h b/include/spdlog/details/logger_impl.h index 7d58c855..820623db 100644 --- a/include/spdlog/details/logger_impl.h +++ b/include/spdlog/details/logger_impl.h @@ -38,7 +38,10 @@ inline spdlog::logger::logger(const std::string& logger_name, sinks_init_list si // ctor with single sink inline spdlog::logger::logger(const std::string& logger_name, spdlog::sink_ptr single_sink): - logger(logger_name, { single_sink }) + logger(logger_name, +{ + single_sink +}) {} diff --git a/include/spdlog/details/os.h b/include/spdlog/details/os.h index cafe5c29..15b804a3 100644 --- a/include/spdlog/details/os.h +++ b/include/spdlog/details/os.h @@ -56,82 +56,82 @@ namespace spdlog { - namespace details - { - namespace os - { +namespace details +{ +namespace os +{ - inline spdlog::log_clock::time_point now() - { +inline spdlog::log_clock::time_point now() +{ #if defined __linux__ && defined 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))); + 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(); + return log_clock::now(); #endif - } - inline std::tm localtime(const std::time_t &time_tt) - { +} +inline std::tm localtime(const std::time_t &time_tt) +{ #ifdef _WIN32 - std::tm tm; - localtime_s(&tm, &time_tt); + std::tm tm; + localtime_s(&tm, &time_tt); #else - std::tm tm; - localtime_r(&time_tt, &tm); + std::tm tm; + localtime_r(&time_tt, &tm); #endif - return tm; - } + return tm; +} - inline std::tm localtime() - { - std::time_t now_t = time(nullptr); - return localtime(now_t); - } +inline std::tm localtime() +{ + std::time_t now_t = time(nullptr); + return localtime(now_t); +} - inline std::tm gmtime(const std::time_t &time_tt) - { +inline std::tm gmtime(const std::time_t &time_tt) +{ #ifdef _WIN32 - std::tm tm; - gmtime_s(&tm, &time_tt); + std::tm tm; + gmtime_s(&tm, &time_tt); #else - std::tm tm; - gmtime_r(&time_tt, &tm); + std::tm tm; + gmtime_r(&time_tt, &tm); #endif - return tm; - } + return tm; +} - inline std::tm gmtime() - { - std::time_t now_t = time(nullptr); - return gmtime(now_t); - } - inline bool operator==(const std::tm& tm1, const std::tm& tm2) - { - return (tm1.tm_sec == tm2.tm_sec && - tm1.tm_min == tm2.tm_min && - tm1.tm_hour == tm2.tm_hour && - tm1.tm_mday == tm2.tm_mday && - tm1.tm_mon == tm2.tm_mon && - tm1.tm_year == tm2.tm_year && - tm1.tm_isdst == tm2.tm_isdst); - } +inline std::tm gmtime() +{ + std::time_t now_t = time(nullptr); + return gmtime(now_t); +} +inline bool operator==(const std::tm& tm1, const std::tm& tm2) +{ + return (tm1.tm_sec == tm2.tm_sec && + tm1.tm_min == tm2.tm_min && + tm1.tm_hour == tm2.tm_hour && + tm1.tm_mday == tm2.tm_mday && + tm1.tm_mon == tm2.tm_mon && + tm1.tm_year == tm2.tm_year && + tm1.tm_isdst == tm2.tm_isdst); +} - inline bool operator!=(const std::tm& tm1, const std::tm& tm2) - { - return !(tm1 == tm2); - } +inline bool operator!=(const std::tm& tm1, const std::tm& tm2) +{ + return !(tm1 == tm2); +} - // eol definition +// eol definition #if !defined (SPDLOG_EOL) #ifdef _WIN32 #define SPDLOG_EOL "\r\n" @@ -140,322 +140,326 @@ namespace spdlog #endif #endif - SPDLOG_CONSTEXPR static const char* eol = SPDLOG_EOL; - SPDLOG_CONSTEXPR static int eol_size = sizeof(SPDLOG_EOL) - 1; +SPDLOG_CONSTEXPR static const char* eol = SPDLOG_EOL; +SPDLOG_CONSTEXPR static int eol_size = sizeof(SPDLOG_EOL) - 1; - inline void prevent_child_fd(FILE *f) - { +inline void prevent_child_fd(FILE *f) +{ #ifdef _WIN32 - auto file_handle = (HANDLE)_get_osfhandle(_fileno(f)); - if (!::SetHandleInformation(file_handle, HANDLE_FLAG_INHERIT, 0)) - throw spdlog_ex("SetHandleInformation failed", errno); + auto file_handle = (HANDLE)_get_osfhandle(_fileno(f)); + if (!::SetHandleInformation(file_handle, HANDLE_FLAG_INHERIT, 0)) + throw spdlog_ex("SetHandleInformation failed", errno); #else - auto fd = fileno(f); - if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) - throw spdlog_ex("fcntl with FD_CLOEXEC failed", errno); + auto fd = fileno(f); + if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) + throw spdlog_ex("fcntl with FD_CLOEXEC failed", errno); #endif - } +} - //fopen_s on non windows for writing - inline int fopen_s(FILE** fp, const filename_t& filename, const filename_t& mode) - { +//fopen_s on non windows for writing +inline int fopen_s(FILE** fp, const filename_t& filename, const filename_t& mode) +{ #ifdef _WIN32 #ifdef SPDLOG_WCHAR_FILENAMES - *fp = _wfsopen((filename.c_str()), mode.c_str(), _SH_DENYWR); + *fp = _wfsopen((filename.c_str()), mode.c_str(), _SH_DENYWR); #else - *fp = _fsopen((filename.c_str()), mode.c_str(), _SH_DENYWR); + *fp = _fsopen((filename.c_str()), mode.c_str(), _SH_DENYWR); #endif #else //unix - *fp = fopen((filename.c_str()), mode.c_str()); + *fp = fopen((filename.c_str()), mode.c_str()); #endif #ifdef SPDLOG_PREVENT_CHILD_FD - if (*fp != nullptr) - prevent_child_fd(*fp); + if (*fp != nullptr) + prevent_child_fd(*fp); #endif - return *fp == nullptr; - } + return *fp == nullptr; +} - inline int remove(const filename_t &filename) - { +inline int remove(const filename_t &filename) +{ #if defined(_WIN32) && defined(SPDLOG_WCHAR_FILENAMES) - return _wremove(filename.c_str()); + return _wremove(filename.c_str()); #else - return std::remove(filename.c_str()); + return std::remove(filename.c_str()); #endif - } +} - inline int rename(const filename_t& filename1, const filename_t& filename2) - { +inline int rename(const filename_t& filename1, const filename_t& filename2) +{ #if defined(_WIN32) && defined(SPDLOG_WCHAR_FILENAMES) - return _wrename(filename1.c_str(), filename2.c_str()); + return _wrename(filename1.c_str(), filename2.c_str()); #else - return std::rename(filename1.c_str(), filename2.c_str()); + return std::rename(filename1.c_str(), filename2.c_str()); #endif - } +} - //Return if file exists - inline bool file_exists(const filename_t& filename) - { +//Return if file exists +inline bool file_exists(const filename_t& filename) +{ #ifdef _WIN32 #ifdef SPDLOG_WCHAR_FILENAMES - auto attribs = GetFileAttributesW(filename.c_str()); + auto attribs = GetFileAttributesW(filename.c_str()); #else - auto attribs = GetFileAttributesA(filename.c_str()); + auto attribs = GetFileAttributesA(filename.c_str()); #endif - return (attribs != INVALID_FILE_ATTRIBUTES && !(attribs & FILE_ATTRIBUTE_DIRECTORY)); + return (attribs != INVALID_FILE_ATTRIBUTES && !(attribs & FILE_ATTRIBUTE_DIRECTORY)); #else //common linux/unix all have the stat system call - struct stat buffer; - return (stat(filename.c_str(), &buffer) == 0); + struct stat buffer; + return (stat(filename.c_str(), &buffer) == 0); #endif - } +} - //Return file size according to open FILE* object - inline size_t filesize(FILE *f) - { - if (f == nullptr) - throw spdlog_ex("Failed getting file size. fd is null"); +//Return file size according to open FILE* object +inline size_t filesize(FILE *f) +{ + if (f == nullptr) + throw spdlog_ex("Failed getting file size. fd is null"); #ifdef _WIN32 - int fd = _fileno(f); + int fd = _fileno(f); #if _WIN64 //64 bits - struct _stat64 st; - if (_fstat64(fd, &st) == 0) - return st.st_size; + struct _stat64 st; + if (_fstat64(fd, &st) == 0) + return st.st_size; #else //windows 32 bits - long ret = _filelength(fd); - if (ret >= 0) - return static_cast(ret); + long ret = _filelength(fd); + if (ret >= 0) + return static_cast(ret); #endif #else // unix - int fd = fileno(f); - //64 bits(but not in osx, where fstat64 is deprecated) + int fd = fileno(f); + //64 bits(but not in osx, where fstat64 is deprecated) #if !defined(__FreeBSD__) && !defined(__APPLE__) && (defined(__x86_64__) || defined(__ppc64__)) - struct stat64 st; - if (fstat64(fd, &st) == 0) - return static_cast(st.st_size); + struct stat64 st; + if (fstat64(fd, &st) == 0) + return static_cast(st.st_size); #else // unix 32 bits or osx - struct stat st; - if (fstat(fd, &st) == 0) - return static_cast(st.st_size); + struct stat st; + if (fstat(fd, &st) == 0) + return static_cast(st.st_size); #endif #endif - throw spdlog_ex("Failed getting file size from fd", errno); - } + throw spdlog_ex("Failed getting file size from fd", errno); +} - //Return utc offset in minutes or throw spdlog_ex on failure - inline int utc_minutes_offset(const std::tm& tm = details::os::localtime()) - { +//Return utc offset in minutes or throw spdlog_ex on failure +inline int utc_minutes_offset(const std::tm& tm = details::os::localtime()) +{ #ifdef _WIN32 #if _WIN32_WINNT < _WIN32_WINNT_WS08 - TIME_ZONE_INFORMATION tzinfo; - auto rv = GetTimeZoneInformation(&tzinfo); + TIME_ZONE_INFORMATION tzinfo; + auto rv = GetTimeZoneInformation(&tzinfo); #else - DYNAMIC_TIME_ZONE_INFORMATION tzinfo; - auto rv = GetDynamicTimeZoneInformation(&tzinfo); + DYNAMIC_TIME_ZONE_INFORMATION tzinfo; + auto rv = GetDynamicTimeZoneInformation(&tzinfo); #endif - if (rv == TIME_ZONE_ID_INVALID) - throw spdlog::spdlog_ex("Failed getting timezone info. ", errno); + if (rv == TIME_ZONE_ID_INVALID) + throw spdlog::spdlog_ex("Failed getting timezone info. ", errno); - int offset = -tzinfo.Bias; - if (tm.tm_isdst) - offset -= tzinfo.DaylightBias; - else - offset -= tzinfo.StandardBias; - return offset; + int offset = -tzinfo.Bias; + if (tm.tm_isdst) + offset -= tzinfo.DaylightBias; + else + offset -= tzinfo.StandardBias; + return offset; #else #if defined(sun) || defined(__sun) - // 'tm_gmtoff' field is BSD extension and it's missing on SunOS/Solaris - struct helper - { - static long int calculate_gmt_offset(const std::tm & localtm = details::os::localtime(), const std::tm & gmtm = details::os::gmtime()) - { - int local_year = localtm.tm_year + (1900 - 1); - int gmt_year = gmtm.tm_year + (1900 - 1); + // 'tm_gmtoff' field is BSD extension and it's missing on SunOS/Solaris + struct helper + { + static long int calculate_gmt_offset(const std::tm & localtm = details::os::localtime(), const std::tm & gmtm = details::os::gmtime()) + { + int local_year = localtm.tm_year + (1900 - 1); + int gmt_year = gmtm.tm_year + (1900 - 1); - long int days = ( - // difference in day of year - localtm.tm_yday - gmtm.tm_yday + long int days = ( + // difference in day of year + localtm.tm_yday - gmtm.tm_yday - // + intervening leap days - + ((local_year >> 2) - (gmt_year >> 2)) - - (local_year / 100 - gmt_year / 100) - + ((local_year / 100 >> 2) - (gmt_year / 100 >> 2)) + // + intervening leap days + + ((local_year >> 2) - (gmt_year >> 2)) + - (local_year / 100 - gmt_year / 100) + + ((local_year / 100 >> 2) - (gmt_year / 100 >> 2)) - // + difference in years * 365 */ - + (long int)(local_year - gmt_year) * 365 - ); + // + difference in years * 365 */ + + (long int)(local_year - gmt_year) * 365 + ); - long int hours = (24 * days) + (localtm.tm_hour - gmtm.tm_hour); - long int mins = (60 * hours) + (localtm.tm_min - gmtm.tm_min); - long int secs = (60 * mins) + (localtm.tm_sec - gmtm.tm_sec); + long int hours = (24 * days) + (localtm.tm_hour - gmtm.tm_hour); + long int mins = (60 * hours) + (localtm.tm_min - gmtm.tm_min); + long int secs = (60 * mins) + (localtm.tm_sec - gmtm.tm_sec); - return secs; - } - }; + return secs; + } + }; - long int offset_seconds = helper::calculate_gmt_offset(tm); + long int offset_seconds = helper::calculate_gmt_offset(tm); #else - long int offset_seconds = tm.tm_gmtoff; + long int offset_seconds = tm.tm_gmtoff; #endif - return static_cast(offset_seconds / 60); + return static_cast(offset_seconds / 60); #endif - } +} - //Return current thread id as size_t - //It exists because the std::this_thread::get_id() is much slower(espcially under VS 2013) - inline size_t _thread_id() - { +//Return current thread id as size_t +//It exists because the std::this_thread::get_id() is much slower(espcially under VS 2013) +inline size_t _thread_id() +{ #ifdef _WIN32 - return static_cast(::GetCurrentThreadId()); + return static_cast(::GetCurrentThreadId()); #elif __linux__ # if defined(__ANDROID__) && defined(__ANDROID_API__) && (__ANDROID_API__ < 21) # define SYS_gettid __NR_gettid # endif - return static_cast(syscall(SYS_gettid)); + return static_cast(syscall(SYS_gettid)); #elif __FreeBSD__ - long tid; - thr_self(&tid); - return static_cast(tid); + long tid; + thr_self(&tid); + return static_cast(tid); #else //Default to standard C++11 (OSX and other Unix) - return static_cast(std::hash()(std::this_thread::get_id())); + return static_cast(std::hash()(std::this_thread::get_id())); #endif - } +} - //Return current thread id as size_t (from thread local storage) - inline size_t thread_id() - { +//Return current thread id as size_t (from thread local storage) +inline size_t thread_id() +{ #if defined(_MSC_VER) && (_MSC_VER < 1900) || defined(__clang__) && !__has_feature(cxx_thread_local) - return _thread_id(); + return _thread_id(); #else - static thread_local const size_t tid = _thread_id(); - return tid; + static thread_local const size_t tid = _thread_id(); + return tid; #endif - } +} - // wchar support for windows file names (SPDLOG_WCHAR_FILENAMES must be defined) +// wchar support for windows file names (SPDLOG_WCHAR_FILENAMES must be defined) #if defined(_WIN32) && defined(SPDLOG_WCHAR_FILENAMES) #define SPDLOG_FILENAME_T(s) L ## s - inline std::string filename_to_str(const filename_t& filename) - { - std::wstring_convert, wchar_t> c; - return c.to_bytes(filename); - } +inline std::string filename_to_str(const filename_t& filename) +{ + std::wstring_convert, wchar_t> c; + return c.to_bytes(filename); +} #else #define SPDLOG_FILENAME_T(s) s - inline std::string filename_to_str(const filename_t& filename) - { - return filename; - } +inline std::string filename_to_str(const filename_t& filename) +{ + return filename; +} #endif - inline std::string errno_to_string(char[256], char* res) - { - return std::string(res); - } +inline std::string errno_to_string(char[256], char* res) +{ + return std::string(res); +} - inline std::string errno_to_string(char buf[256], int res) - { - if (res == 0) { - return std::string(buf); - } - else { - return "Unknown error"; - } - } +inline std::string errno_to_string(char buf[256], int res) +{ + if (res == 0) + { + return std::string(buf); + } + else + { + return "Unknown error"; + } +} - // Return errno string (thread safe) - inline std::string errno_str(int err_num) - { - char buf[256]; - SPDLOG_CONSTEXPR auto buf_size = sizeof(buf); +// Return errno string (thread safe) +inline std::string errno_str(int err_num) +{ + char buf[256]; + SPDLOG_CONSTEXPR auto buf_size = sizeof(buf); #ifdef _WIN32 - if (strerror_s(buf, buf_size, err_num) == 0) - return std::string(buf); - else - return "Unknown error"; + if (strerror_s(buf, buf_size, err_num) == 0) + return std::string(buf); + else + return "Unknown error"; #elif defined(__FreeBSD__) || defined(__APPLE__) || defined(ANDROID) || defined(__SUNPRO_CC) || \ ((_POSIX_C_SOURCE >= 200112L) && ! defined(_GNU_SOURCE)) // posix version - if (strerror_r(err_num, buf, buf_size) == 0) - return std::string(buf); - else - return "Unknown error"; + if (strerror_r(err_num, buf, buf_size) == 0) + return std::string(buf); + else + return "Unknown error"; #else // gnu version (might not use the given buf, so its retval pointer must be used) - auto err = strerror_r(err_num, buf, buf_size); // let compiler choose type - return errno_to_string(buf, err); // use overloading to select correct stringify function + auto err = strerror_r(err_num, buf, buf_size); // let compiler choose type + return errno_to_string(buf, err); // use overloading to select correct stringify function #endif - } +} - inline int pid() - { +inline int pid() +{ #ifdef _WIN32 - return ::_getpid(); + return ::_getpid(); #else - return static_cast(::getpid()); + return static_cast(::getpid()); #endif - } +} - // Detrmine if the terminal supports colors - // Source: https://github.com/agauniyal/rang/ - inline bool is_color_terminal() - { +// Detrmine if the terminal supports colors +// Source: https://github.com/agauniyal/rang/ +inline bool is_color_terminal() +{ #ifdef _WIN32 - return true; + return true; #else - static constexpr const char* Terms[] = - { - "ansi", "color", "console", "cygwin", "gnome", "konsole", "kterm", - "linux", "msys", "putty", "rxvt", "screen", "vt100", "xterm" - }; + static constexpr const char* Terms[] = + { + "ansi", "color", "console", "cygwin", "gnome", "konsole", "kterm", + "linux", "msys", "putty", "rxvt", "screen", "vt100", "xterm" + }; - const char *env_p = std::getenv("TERM"); - if (env_p == nullptr) { - return false; - } + const char *env_p = std::getenv("TERM"); + if (env_p == nullptr) + { + return false; + } - static const bool result = std::any_of( - std::begin(Terms), std::end(Terms), [&](const char* term) { - return std::strstr(env_p, term) != nullptr; - }); - return result; + static const bool result = std::any_of( + std::begin(Terms), std::end(Terms), [&](const char* term) + { + return std::strstr(env_p, term) != nullptr; + }); + return result; #endif - } +} - // Detrmine if the terminal attached - // Source: https://github.com/agauniyal/rang/ - inline bool in_terminal(FILE* file) - { +// Detrmine if the terminal attached +// Source: https://github.com/agauniyal/rang/ +inline bool in_terminal(FILE* file) +{ #ifdef _WIN32 - return _isatty(_fileno(file)) ? true : false; + return _isatty(_fileno(file)) ? true : false; #else - return isatty(fileno(file)) ? true : false; + return isatty(fileno(file)) ? true : false; #endif - } - } //os - } //details +} +} //os +} //details } //spdlog diff --git a/include/spdlog/details/spdlog_impl.h b/include/spdlog/details/spdlog_impl.h index 2552d952..a381df43 100644 --- a/include/spdlog/details/spdlog_impl.h +++ b/include/spdlog/details/spdlog_impl.h @@ -149,13 +149,13 @@ inline std::shared_ptr spdlog::stdout_color_st(const std::string inline std::shared_ptr spdlog::stderr_color_mt(const std::string& logger_name) { - auto sink = std::make_shared(); + auto sink = std::make_shared(); return spdlog::details::registry::instance().create(logger_name, sink); } inline std::shared_ptr spdlog::stderr_color_st(const std::string& logger_name) { - auto sink = std::make_shared(); + auto sink = std::make_shared(); return spdlog::details::registry::instance().create(logger_name, sink); } #endif diff --git a/include/spdlog/sinks/ansicolor_sink.h b/include/spdlog/sinks/ansicolor_sink.h index a25eecb3..b223d69f 100644 --- a/include/spdlog/sinks/ansicolor_sink.h +++ b/include/spdlog/sinks/ansicolor_sink.h @@ -14,85 +14,85 @@ namespace spdlog { - namespace sinks - { +namespace sinks +{ - /** - * @brief The ansi_color_sink is a decorator around another sink and prefixes - * the output with an ANSI escape sequence color code depending on the severity - * of the message. - */ - template - class ansicolor_sink SPDLOG_FINAL: public base_sink - { - public: - ansicolor_sink(FILE* file): target_file_(file) - { - should_do_colors_ = details::os::in_terminal(file) && details::os::is_color_terminal(); - colors_[level::trace] = "\033[36m"; // cyan; - colors_[level::debug] = "\033[36m"; // cyan; - colors_[level::info] = "\033[1m";// bold; - colors_[level::warn] = "\033[33m\033[1m"; // yellow_bold; - colors_[level::err] = "\033[31m\033[1m"; // red_bold; - colors_[level::critical] = "\033[1m\033[41m"; // bold_red_bg; - colors_[level::off] = "\033[00m"; //reset; - } - virtual ~ansicolor_sink() - { - flush(); - } +/** + * @brief The ansi_color_sink is a decorator around another sink and prefixes + * the output with an ANSI escape sequence color code depending on the severity + * of the message. + */ +template +class ansicolor_sink SPDLOG_FINAL: public base_sink +{ +public: + ansicolor_sink(FILE* file): target_file_(file) + { + should_do_colors_ = details::os::in_terminal(file) && details::os::is_color_terminal(); + colors_[level::trace] = "\033[36m"; // cyan; + colors_[level::debug] = "\033[36m"; // cyan; + colors_[level::info] = "\033[1m";// bold; + colors_[level::warn] = "\033[33m\033[1m"; // yellow_bold; + colors_[level::err] = "\033[31m\033[1m"; // red_bold; + colors_[level::critical] = "\033[1m\033[41m"; // bold_red_bg; + colors_[level::off] = "\033[00m"; //reset; + } + virtual ~ansicolor_sink() + { + flush(); + } - void flush() override - { - fflush(target_file_); - } + void flush() override + { + fflush(target_file_); + } - protected: - virtual void _sink_it(const details::log_msg& msg) override - { - // Wrap the originally formatted message in color codes. - // If color is not supported in the terminal, log as is instead. - if (should_do_colors_) - { - const std::string& prefix = colors_[msg.level]; - const std::string& reset = colors_[level::off]; - fwrite(prefix.c_str(), sizeof(char), prefix.size(), target_file_); - fwrite(msg.formatted.data(), sizeof(char), msg.formatted.size(), target_file_); - fwrite(reset.c_str(), sizeof(char), reset.size(), target_file_); - } - else - { - fwrite(msg.formatted.data(), sizeof(char), msg.formatted.size(), target_file_); - } - } - FILE* target_file_; - bool should_do_colors_; - std::map colors_; - }; +protected: + virtual void _sink_it(const details::log_msg& msg) override + { + // Wrap the originally formatted message in color codes. + // If color is not supported in the terminal, log as is instead. + if (should_do_colors_) + { + const std::string& prefix = colors_[msg.level]; + const std::string& reset = colors_[level::off]; + fwrite(prefix.c_str(), sizeof(char), prefix.size(), target_file_); + fwrite(msg.formatted.data(), sizeof(char), msg.formatted.size(), target_file_); + fwrite(reset.c_str(), sizeof(char), reset.size(), target_file_); + } + else + { + fwrite(msg.formatted.data(), sizeof(char), msg.formatted.size(), target_file_); + } + } + FILE* target_file_; + bool should_do_colors_; + std::map colors_; +}; - template - class ansicolor_stdout_sink: public ansicolor_sink - { - public: - ansicolor_stdout_sink(): ansicolor_sink(stdout) - {} - }; +template +class ansicolor_stdout_sink: public ansicolor_sink +{ +public: + ansicolor_stdout_sink(): ansicolor_sink(stdout) + {} +}; - template - class ansicolor_stderr_sink: public ansicolor_sink - { - public: - ansicolor_stderr_sink(): ansicolor_sink(stderr) - {} - }; +template +class ansicolor_stderr_sink: public ansicolor_sink +{ +public: + ansicolor_stderr_sink(): ansicolor_sink(stderr) + {} +}; - typedef ansicolor_stdout_sink ansicolor_stdout_sink_mt; - typedef ansicolor_stdout_sink ansicolor_stdout_sink_st; +typedef ansicolor_stdout_sink ansicolor_stdout_sink_mt; +typedef ansicolor_stdout_sink ansicolor_stdout_sink_st; - typedef ansicolor_stderr_sink ansicolor_stderr_sink_mt; - typedef ansicolor_stderr_sink ansicolor_stderr_sink_st; +typedef ansicolor_stderr_sink ansicolor_stderr_sink_mt; +typedef ansicolor_stderr_sink ansicolor_stderr_sink_st; - } // namespace sinks +} // namespace sinks } // namespace spdlog diff --git a/include/spdlog/tweakme.h b/include/spdlog/tweakme.h index 9cbd4096..4d52ab76 100644 --- a/include/spdlog/tweakme.h +++ b/include/spdlog/tweakme.h @@ -122,7 +122,7 @@ /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// -// Uncomment to enable message counting feature. Adds %i logger pattern that +// Uncomment to enable message counting feature. Adds %i logger pattern that // prints log message sequence id. // // #define SPDLOG_ENABLE_MESSAGE_COUNTER