diff options
author | Yuqian Yang <crupest@crupest.life> | 2025-09-07 14:22:41 +0800 |
---|---|---|
committer | Yuqian Yang <crupest@crupest.life> | 2025-09-07 14:22:41 +0800 |
commit | 6e04e90a803e9f0fad296d993f26eab076753449 (patch) | |
tree | cc797e25f2d0a52837883c7c4585b689c0fd596e /include/cru/base | |
parent | bba3d52af4526ee19bd962c2448d0f8d24d4070b (diff) | |
download | cru-6e04e90a803e9f0fad296d993f26eab076753449.tar.gz cru-6e04e90a803e9f0fad296d993f26eab076753449.tar.bz2 cru-6e04e90a803e9f0fad296d993f26eab076753449.zip |
Avoid clang consteval bug in logger format.
Diffstat (limited to 'include/cru/base')
-rw-r--r-- | include/cru/base/log/Logger.h | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/include/cru/base/log/Logger.h b/include/cru/base/log/Logger.h index 1963b612..3ed119e2 100644 --- a/include/cru/base/log/Logger.h +++ b/include/cru/base/log/Logger.h @@ -1,7 +1,6 @@ #pragma once #include "../Base.h" -#include "../String.h" #include "../concurrent/ConcurrentQueue.h" #include <format> // IWYU pragma: keep @@ -47,6 +46,14 @@ class CRU_BASE_API Logger : public Object2 { } void Log(LogInfo log_info); + template <typename... Args> + void FormatLog(LogLevel level, std::string tag, + std::string_view message_format, Args&&... args) { + // Clang is buggy in consteval, so we can't use std::format for now. + Log(level, std::move(tag), + std::vformat(message_format, std::make_format_args(args...))); + } + private: concurrent::ConcurrentQueue<LogInfo> log_queue_; @@ -87,18 +94,18 @@ class CRU_BASE_API LoggerCppStream : public Object2 { } // namespace cru::log -#define CRU_LOG_TAG_DEBUG(...) \ - cru::log::Logger::GetInstance()->Log(cru::log::LogLevel::Debug, kLogTag, \ - std::format(__VA_ARGS__)) +#define CRU_LOG_TAG_DEBUG(...) \ + cru::log::Logger::GetInstance()->FormatLog(cru::log::LogLevel::Debug, \ + kLogTag, __VA_ARGS__) -#define CRU_LOG_TAG_INFO(...) \ - cru::log::Logger::GetInstance()->Log(cru::log::LogLevel::Info, kLogTag, \ - std::format(__VA_ARGS__)) +#define CRU_LOG_TAG_INFO(...) \ + cru::log::Logger::GetInstance()->FormatLog(cru::log::LogLevel::Info, \ + kLogTag, __VA_ARGS__) -#define CRU_LOG_TAG_WARN(...) \ - cru::log::Logger::GetInstance()->Log(cru::log::LogLevel::Warn, kLogTag, \ - std::format(__VA_ARGS__)) +#define CRU_LOG_TAG_WARN(...) \ + cru::log::Logger::GetInstance()->FormatLog(cru::log::LogLevel::Warn, \ + kLogTag, __VA_ARGS__) -#define CRU_LOG_TAG_ERROR(...) \ - cru::log::Logger::GetInstance()->Log(cru::log::LogLevel::Error, kLogTag, \ - std::format(__VA_ARGS__)) +#define CRU_LOG_TAG_ERROR(...) \ + cru::log::Logger::GetInstance()->FormatLog(cru::log::LogLevel::Error, \ + kLogTag, __VA_ARGS__) |