Unverified Commit 01f2438c authored by Gabi Melman's avatar Gabi Melman Committed by GitHub

Merge pull request #1169 from TranslucentTB/v1.x

Add more overloads to spdlog::log and spdlog::logger::log
parents e0cf16b7 eb51f37c
...@@ -95,7 +95,13 @@ using string_view_t = basic_string_view_t<char>; ...@@ -95,7 +95,13 @@ using string_view_t = basic_string_view_t<char>;
#error SPDLOG_WCHAR_TO_UTF8_SUPPORT only supported on windows #error SPDLOG_WCHAR_TO_UTF8_SUPPORT only supported on windows
#else #else
using wstring_view_t = basic_string_view_t<wchar_t>; using wstring_view_t = basic_string_view_t<wchar_t>;
template<typename T>
struct is_convertible_to_wstring_view : std::is_convertible<T, wstring_view_t> { };
#endif // _WIN32 #endif // _WIN32
#else
template<typename>
struct is_convertible_to_wstring_view : std::false_type { };
#endif // SPDLOG_WCHAR_TO_UTF8_SUPPORT #endif // SPDLOG_WCHAR_TO_UTF8_SUPPORT
#if defined(SPDLOG_NO_ATOMIC_LEVELS) #if defined(SPDLOG_NO_ATOMIC_LEVELS)
......
...@@ -143,7 +143,7 @@ public: ...@@ -143,7 +143,7 @@ public:
} }
// T can be statically converted to string_view // T can be statically converted to string_view
template<class T, typename std::enable_if<std::is_convertible<T, spdlog::string_view_t>::value, T>::type * = nullptr> template<class T, typename std::enable_if<std::is_convertible<const T &, spdlog::string_view_t>::value, T>::type * = nullptr>
void log(source_loc loc, level::level_enum lvl, const T &msg) void log(source_loc loc, level::level_enum lvl, const T &msg)
{ {
if (!should_log(lvl)) if (!should_log(lvl))
...@@ -155,8 +155,8 @@ public: ...@@ -155,8 +155,8 @@ public:
sink_it_(log_msg); sink_it_(log_msg);
} }
// T cannot be statically converted to string_view // T cannot be statically converted to string_view or wstring_view
template<class T, typename std::enable_if<!std::is_convertible<T, spdlog::string_view_t>::value, T>::type * = nullptr> template<class T, typename std::enable_if<!std::is_convertible<const T &, spdlog::string_view_t>::value && !is_convertible_to_wstring_view<const T &>::value, T>::type * = nullptr>
void log(source_loc loc, level::level_enum lvl, const T &msg) void log(source_loc loc, level::level_enum lvl, const T &msg)
{ {
if (!should_log(lvl)) if (!should_log(lvl))
...@@ -228,7 +228,7 @@ public: ...@@ -228,7 +228,7 @@ public:
fmt::format_to(wbuf, fmt, args...); fmt::format_to(wbuf, fmt, args...);
fmt::memory_buffer buf; fmt::memory_buffer buf;
details::os::wstr_to_utf8buf(basic_string_view_t<wchar_t>(wbuf.data(), wbuf.size()), buf); details::os::wstr_to_utf8buf(wstring_view_t(wbuf.data(), wbuf.size()), buf);
details::log_msg log_msg(source, name_, lvl, string_view_t(buf.data(), buf.size())); details::log_msg log_msg(source, name_, lvl, string_view_t(buf.data(), buf.size()));
sink_it_(log_msg); sink_it_(log_msg);
...@@ -277,6 +277,26 @@ public: ...@@ -277,6 +277,26 @@ public:
{ {
log(level::critical, fmt, args...); log(level::critical, fmt, args...);
} }
// T can be statically converted to wstring_view
template<class T, typename std::enable_if<is_convertible_to_wstring_view<const T &>::value, T>::type * = nullptr>
void log(source_loc loc, level::level_enum lvl, const T &msg)
{
if (!should_log(lvl))
{
return;
}
try
{
fmt::memory_buffer buf;
details::os::wstr_to_utf8buf(msg, buf);
details::log_msg log_msg(loc, name_, lvl, string_view_t(buf.data(), buf.size()));
sink_it_(log_msg);
}
SPDLOG_LOGGER_CATCH()
}
#endif // _WIN32 #endif // _WIN32
#endif // SPDLOG_WCHAR_TO_UTF8_SUPPORT #endif // SPDLOG_WCHAR_TO_UTF8_SUPPORT
......
...@@ -162,6 +162,12 @@ inline void critical(string_view_t fmt, const Args &... args) ...@@ -162,6 +162,12 @@ inline void critical(string_view_t fmt, const Args &... args)
default_logger_raw()->critical(fmt, args...); default_logger_raw()->critical(fmt, args...);
} }
template<typename T>
inline void log(source_loc source, level::level_enum lvl, const T &msg)
{
default_logger_raw()->log(source, lvl, msg);
}
template<typename T> template<typename T>
inline void log(level::level_enum lvl, const T &msg) inline void log(level::level_enum lvl, const T &msg)
{ {
...@@ -205,6 +211,12 @@ inline void critical(const T &msg) ...@@ -205,6 +211,12 @@ inline void critical(const T &msg)
} }
#ifdef SPDLOG_WCHAR_TO_UTF8_SUPPORT #ifdef SPDLOG_WCHAR_TO_UTF8_SUPPORT
template<typename... Args>
inline void log(source_loc source, level::level_enum lvl, wstring_view_t fmt, const Args &... args)
{
default_logger_raw()->log(source, lvl, fmt, args...);
}
template<typename... Args> template<typename... Args>
inline void log(level::level_enum lvl, wstring_view_t fmt, const Args &... args) inline void log(level::level_enum lvl, wstring_view_t fmt, const Args &... args)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment