From 10d5292bbb8fa9dbb9b6339a0a7f3101e3e81016 Mon Sep 17 00:00:00 2001 From: gabime Date: Sun, 15 May 2016 00:53:35 +0300 Subject: [PATCH] better support for custom eol --- include/spdlog/common.h | 4 ++- include/spdlog/details/os.h | 27 ++++++------------- .../spdlog/details/pattern_formatter_impl.h | 6 +---- include/spdlog/tweakme.h | 4 +-- tests/format.cpp | 6 ++--- 5 files changed, 16 insertions(+), 31 deletions(-) diff --git a/include/spdlog/common.h b/include/spdlog/common.h index 21565053..3edda553 100644 --- a/include/spdlog/common.h +++ b/include/spdlog/common.h @@ -20,11 +20,13 @@ #include -//visual studio upto 2013 does not support noexcept +//visual studio upto 2013 does not support noexcept nor constexpr #if defined(_MSC_VER) && (_MSC_VER < 1900) #define SPDLOG_NOEXCEPT throw() +#define SPDLOG_CONSTEXPR #else #define SPDLOG_NOEXCEPT noexcept +#define SPDLOG_CONSTEXPR constexpr #endif diff --git a/include/spdlog/details/os.h b/include/spdlog/details/os.h index 4567fca1..f230142e 100644 --- a/include/spdlog/details/os.h +++ b/include/spdlog/details/os.h @@ -112,29 +112,18 @@ inline bool operator!=(const std::tm& tm1, const std::tm& tm2) return !(tm1 == tm2); } +// eol at end of each log line +#if !defined (SPDLOG_EOL) #ifdef _WIN32 -inline const char* eol() -{ - return "\r\n"; -} +#define SPDLOG_EOL "\r\n" #else -constexpr inline const char* eol() -{ - return "\n"; -} +#define SPDLOG_EOL "\n" +#endif #endif -#ifdef _WIN32 -inline unsigned short eol_size() -{ - return 2; -} -#else -constexpr inline unsigned short eol_size() -{ - return 1; -} -#endif +SPDLOG_CONSTEXPR static const char* eol = SPDLOG_EOL; +SPDLOG_CONSTEXPR static int eol_size = sizeof(SPDLOG_EOL) - 1; + //fopen_s on non windows for writing inline int fopen_s(FILE** fp, const filename_t& filename, const filename_t& mode) diff --git a/include/spdlog/details/pattern_formatter_impl.h b/include/spdlog/details/pattern_formatter_impl.h index 265a893e..31e7c828 100644 --- a/include/spdlog/details/pattern_formatter_impl.h +++ b/include/spdlog/details/pattern_formatter_impl.h @@ -619,11 +619,7 @@ inline void spdlog::pattern_formatter::format(details::log_msg& msg) f->format(msg, tm_time); } //write eol -#if defined(SPDLOG_EOL) - msg.formatted << SPDLOG_EOL; -#else - msg.formatted.write(details::os::eol(), details::os::eol_size()); -#endif + msg.formatted.write(details::os::eol, details::os::eol_size); } catch(const fmt::FormatError& e) { diff --git a/include/spdlog/tweakme.h b/include/spdlog/tweakme.h index 8c0ccfaf..01cba98f 100644 --- a/include/spdlog/tweakme.h +++ b/include/spdlog/tweakme.h @@ -65,6 +65,6 @@ /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// -// uncomment the below to override spdlog's default eol -// #define SPDLOG_EOL "\n" +// Uncomment to override default eol ("\n" or "\r\n" under Linux/Windows) +// #define SPDLOG_EOL ";-)\n" /////////////////////////////////////////////////////////////////////////////// diff --git a/tests/format.cpp b/tests/format.cpp index 5182b267..880bbc8d 100644 --- a/tests/format.cpp +++ b/tests/format.cpp @@ -12,10 +12,8 @@ std::string log_info(const T& what, spdlog::level::level_enum logger_level = spd oss_logger.set_level(logger_level); oss_logger.set_pattern("%v"); oss_logger.info() << what; - - //strip last eol and return the logged string - auto eol_size = strlen(spdlog::details::os::eol()); - return oss.str().substr(0, oss.str().length() - eol_size); + + return oss.str().substr(0, oss.str().length() - spdlog::details::os::eol_size); }