Commit 81f29a9a authored by gabime's avatar gabime

Fixed wchar support in messages

parent 898e1f26
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
#include <string> #include <string>
#include <unordered_map> #include <unordered_map>
#if defined(_WIN32) && defined(SPDLOG_WCHAR_FILENAMES) #if defined(SPDLOG_WCHAR_FILENAMES) || defined(SPDLOG_WCHAR_TO_UTF8_SUPPORT)
#include <codecvt> #include <codecvt>
#include <locale> #include <locale>
#endif #endif
......
...@@ -173,24 +173,25 @@ inline void spdlog::logger::critical(const T &msg) ...@@ -173,24 +173,25 @@ inline void spdlog::logger::critical(const T &msg)
} }
#ifdef SPDLOG_WCHAR_TO_UTF8_SUPPORT #ifdef SPDLOG_WCHAR_TO_UTF8_SUPPORT
#include <codecvt>
#include <locale>
template<typename... Args>
inline void spdlog::logger::log(level::level_enum lvl, const wchar_t *msg)
{
std::wstring_convert<std::codecvt_utf8<wchar_t>> conv;
log(lvl, conv.to_bytes(msg));
}
template<typename... Args> template<typename... Args>
inline void spdlog::logger::log(level::level_enum lvl, const wchar_t *fmt, const Args &... args) inline void spdlog::logger::log(level::level_enum lvl, const wchar_t *fmt, const Args &... args)
{ {
fmt::WMemoryWriter wWriter; if (!should_log(lvl))
{
wWriter.write(fmt, args...); return;
log(lvl, wWriter.c_str()); }
decltype(wstring_converter_)::byte_string utf8_string;
try
{
{
std::lock_guard<std::mutex> lock(wstring_converter_mutex_);
utf8_string = wstring_converter_.to_bytes(fmt);
}
log(lvl, utf8_string.c_str(), args...);
}
SPDLOG_CATCH_AND_HANDLE
} }
template<typename... Args> template<typename... Args>
......
...@@ -63,10 +63,7 @@ public: ...@@ -63,10 +63,7 @@ public:
template<typename... Args> template<typename... Args>
void critical(const char *fmt, const Args &... args); void critical(const char *fmt, const Args &... args);
#ifdef SPDLOG_WCHAR_TO_UTF8_SUPPORT #ifdef SPDLOG_WCHAR_TO_UTF8_SUPPORT
template<typename... Args>
void log(level::level_enum lvl, const wchar_t *msg);
template<typename... Args> template<typename... Args>
void log(level::level_enum lvl, const wchar_t *fmt, const Args &... args); void log(level::level_enum lvl, const wchar_t *fmt, const Args &... args);
...@@ -152,6 +149,11 @@ protected: ...@@ -152,6 +149,11 @@ protected:
log_err_handler err_handler_; log_err_handler err_handler_;
std::atomic<time_t> last_err_time_; std::atomic<time_t> last_err_time_;
std::atomic<size_t> msg_counter_; std::atomic<size_t> msg_counter_;
#ifdef SPDLOG_WCHAR_TO_UTF8_SUPPORT
std::wstring_convert<std::codecvt_utf8<wchar_t>> wstring_converter_;
std::mutex wstring_converter_mutex_;
#endif
}; };
} // namespace spdlog } // namespace spdlog
......
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