34namespace utility::logging
45 LogLevel parseLevel(
const char *text, LogLevel fallback)
47 if (text ==
nullptr) {
50 std::string value(text);
51 std::transform(value.begin(), value.end(), value.begin(),
53 return static_cast<char>(std::tolower(c));
55 if (value ==
"debug") {
56 return LogLevel::DEBUG_LEVEL;
58 if (value ==
"info") {
59 return LogLevel::INFO_LEVEL;
61 if (value ==
"warning") {
62 return LogLevel::WARNING_LEVEL;
64 if (value ==
"error") {
65 return LogLevel::ERROR_LEVEL;
74 case LogLevel::DEBUG_LEVEL:
76 case LogLevel::INFO_LEVEL:
78 case LogLevel::WARNING_LEVEL:
80 case LogLevel::ERROR_LEVEL:
89 auto now = std::chrono::system_clock::now();
90 auto time = std::chrono::system_clock::to_time_t(now);
91 auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(
92 now.time_since_epoch())
97 localtime_s(&local, &time);
99 localtime_r(&time, &local);
107 std::strftime(buffer,
sizeof(buffer),
"%Y-%m-%d %H:%M:%S", &local);
108 const int millis =
static_cast<int>(ms.count());
109 buffer[length++] =
'.';
110 buffer[length++] =
static_cast<char>(
'0' + (millis / 100) % 10);
111 buffer[length++] =
static_cast<char>(
'0' + (millis / 10) % 10);
112 buffer[length++] =
static_cast<char>(
'0' + millis % 10);
113 return std::string(buffer, length);
120 const char *envLevel = std::getenv(
"UTILITY_LOG_LEVEL");
121 if (envLevel !=
nullptr) {
124 _minLevel.load(std::memory_order_relaxed)),
125 std::memory_order_relaxed);
131 _minLevel.store(level, std::memory_order_relaxed);
136 return _minLevel.load(std::memory_order_relaxed);
141 _flushPolicy.store(policy, std::memory_order_relaxed);
146 return _flushPolicy.load(std::memory_order_relaxed);
LogLevel getMinLevel(void) const noexcept
Get the current minimum log level.
FlushPolicy getFlushPolicy(void) const noexcept
Get the current output flush policy.
void setMinLevel(LogLevel level) noexcept
Set the minimum log level. Messages below this level are suppressed.
Logger(const std::string &name)
Default constructor.
static std::string levelToString(LogLevel level)
Get string representation of log level.
void setFlushPolicy(FlushPolicy policy) noexcept
Set the output flush policy.
static std::string getTimestamp(void)
Get current timestamp as formatted string.
Logging interface with levels, source-location metadata, and stream-style output.
FlushPolicy
Controls when a stream-backed logger flushes its output.
LogLevel
Log severity levels.