aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-09-07 14:22:41 +0800
committerYuqian Yang <crupest@crupest.life>2025-09-07 14:22:41 +0800
commit6e04e90a803e9f0fad296d993f26eab076753449 (patch)
treecc797e25f2d0a52837883c7c4585b689c0fd596e /include
parentbba3d52af4526ee19bd962c2448d0f8d24d4070b (diff)
downloadcru-6e04e90a803e9f0fad296d993f26eab076753449.tar.gz
cru-6e04e90a803e9f0fad296d993f26eab076753449.tar.bz2
cru-6e04e90a803e9f0fad296d993f26eab076753449.zip
Avoid clang consteval bug in logger format.
Diffstat (limited to 'include')
-rw-r--r--include/cru/base/log/Logger.h33
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__)