Skip to content

Commit b2bbb55

Browse files
committed
Merge branch 'dev'
2 parents d041ceb + 613e951 commit b2bbb55

5 files changed

Lines changed: 173 additions & 141 deletions

File tree

examples/log_demo.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,8 @@ int main()
8080
const bool async_mode = env_bool("VIX_LOG_ASYNC", true);
8181
log.setAsync(async_mode);
8282
log.setLevel(env_bool("VIX_LOG_DEBUG", false)
83-
? Logger::Level::DEBUG
84-
: Logger::Level::INFO);
83+
? Logger::Level::Debug
84+
: Logger::Level::Info);
8585

8686
// Contextual metadata (useful for distributed tracing)
8787
Logger::Context cx;
@@ -92,13 +92,13 @@ int main()
9292
log.setContext(cx);
9393

9494
// Log examples
95-
log.log(Logger::Level::INFO, "Hello from utils/log_demo");
96-
log.log(Logger::Level::DEBUG, "Debug enabled = {}", env_bool("VIX_LOG_DEBUG", false));
95+
log.log(Logger::Level::Info, "Hello from utils/log_demo");
96+
log.log(Logger::Level::Debug, "Debug enabled = {}", env_bool("VIX_LOG_DEBUG", false));
9797

9898
// Structured key-value logging
99-
log.logf(Logger::Level::INFO, "Boot args", "port", env_int("APP_PORT", 8080), "async", async_mode);
99+
log.logf(Logger::Level::Info, "Boot args", "port", env_int("APP_PORT", 8080), "async", async_mode);
100100

101-
log.log(Logger::Level::WARN, "This is a warning");
101+
log.log(Logger::Level::Warn, "This is a warning");
102102

103103
// Uncomment for error test
104104
// log.throwError("Demo error: {}", "something went wrong");

examples/validation_demo.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,21 +77,21 @@ int main()
7777
// Logger setup (pattern & level)
7878
auto &log = Logger::getInstance();
7979
log.setPattern("[%Y-%m-%d %H:%M:%S.%e] [%^%l%$] %v");
80-
log.setLevel(Logger::Level::INFO);
80+
log.setLevel(Logger::Level::Info);
8181

8282
// Validation process
8383
const auto r = validate_map(data, sch);
8484

8585
if (r.is_ok())
8686
{
87-
log.log(Logger::Level::INFO, "Validation OK");
87+
log.log(Logger::Level::Info, "Validation OK");
8888
return 0;
8989
}
9090

91-
log.log(Logger::Level::ERROR, "Validation FAILED:");
91+
log.log(Logger::Level::Error, "Validation FAILED:");
9292
for (const auto &kv : r.error())
9393
{
94-
log.log(Logger::Level::ERROR, " - {} -> {}", kv.first, kv.second);
94+
log.log(Logger::Level::Error, " - {} -> {}", kv.first, kv.second);
9595
}
9696

9797
return 1;

include/vix/utils/Logger.hpp

Lines changed: 78 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
* auto &log = vix::utils::Logger::getInstance();
2929
*
3030
* // Optional: set explicit level (otherwise uses VIX_LOG_LEVEL or defaults to INFO)
31-
* log.setLevel(vix::utils::Logger::Level::INFO);
31+
* log.setLevel(vix::utils::Logger::Level::Info);
3232
*
3333
* // Optional: override console pattern
3434
* // Example: compact + colored level
@@ -45,14 +45,14 @@
4545
* log.setContext(ctx);
4646
*
4747
* log.info("User {} logged in", user);
48-
* log.logf(vix::utils::Logger::Level::INFO, "Login ok",
48+
* log.logf(vix::utils::Logger::Level::Info, "Login ok",
4949
* "user", user.c_str(),
5050
* "latency_ms", 12);
5151
* @endcode
5252
*/
5353

5454
#if defined(_WIN32)
55-
// Windows headers sometimes define macros like ERROR/DEBUG/min/max.
55+
// Windows headers sometimes define macros like ERROR/DEBUG/INFO/min/max.
5656
// They break enum values or common identifiers.
5757

5858
#if defined(ERROR)
@@ -67,6 +67,12 @@
6767
#define VIX_UTILS_RESTORE_DEBUG_MACRO 1
6868
#endif
6969

70+
#if defined(INFO)
71+
#pragma push_macro("INFO")
72+
#undef INFO
73+
#define VIX_UTILS_RESTORE_INFO_MACRO 1
74+
#endif
75+
7076
#if defined(min)
7177
#pragma push_macro("min")
7278
#undef min
@@ -141,13 +147,13 @@ namespace vix::utils
141147
*/
142148
enum class Level
143149
{
144-
TRACE,
145-
DEBUG,
146-
INFO,
147-
WARN,
148-
ERROR,
149-
CRITICAL,
150-
OFF
150+
Trace,
151+
Debug,
152+
Info,
153+
Warn,
154+
Error,
155+
Critical,
156+
Off
151157
};
152158

153159
/**
@@ -222,7 +228,7 @@ namespace vix::utils
222228
template <typename... Args>
223229
void trace(fmt::format_string<Args...> fmtstr, Args &&...args)
224230
{
225-
log(Level::TRACE, fmtstr, std::forward<Args>(args)...);
231+
log(Level::Trace, fmtstr, std::forward<Args>(args)...);
226232
}
227233

228234
/**
@@ -231,7 +237,7 @@ namespace vix::utils
231237
template <typename... Args>
232238
void debug(fmt::format_string<Args...> fmtstr, Args &&...args)
233239
{
234-
log(Level::DEBUG, fmtstr, std::forward<Args>(args)...);
240+
log(Level::Debug, fmtstr, std::forward<Args>(args)...);
235241
}
236242

237243
/**
@@ -240,7 +246,7 @@ namespace vix::utils
240246
template <typename... Args>
241247
void info(fmt::format_string<Args...> fmtstr, Args &&...args)
242248
{
243-
log(Level::INFO, fmtstr, std::forward<Args>(args)...);
249+
log(Level::Info, fmtstr, std::forward<Args>(args)...);
244250
}
245251

246252
/**
@@ -249,7 +255,7 @@ namespace vix::utils
249255
template <typename... Args>
250256
void warn(fmt::format_string<Args...> fmtstr, Args &&...args)
251257
{
252-
log(Level::WARN, fmtstr, std::forward<Args>(args)...);
258+
log(Level::Warn, fmtstr, std::forward<Args>(args)...);
253259
}
254260

255261
/**
@@ -258,7 +264,7 @@ namespace vix::utils
258264
template <typename... Args>
259265
void error(fmt::format_string<Args...> fmtstr, Args &&...args)
260266
{
261-
log(Level::ERROR, fmtstr, std::forward<Args>(args)...);
267+
log(Level::Error, fmtstr, std::forward<Args>(args)...);
262268
}
263269

264270
/**
@@ -267,7 +273,7 @@ namespace vix::utils
267273
template <typename... Args>
268274
void critical(fmt::format_string<Args...> fmtstr, Args &&...args)
269275
{
270-
log(Level::CRITICAL, fmtstr, std::forward<Args>(args)...);
276+
log(Level::Critical, fmtstr, std::forward<Args>(args)...);
271277
}
272278

273279
/**
@@ -282,7 +288,7 @@ namespace vix::utils
282288
template <typename... Args>
283289
void log(Level level, fmt::format_string<Args...> fmtstr, Args &&...args)
284290
{
285-
if (level == Level::OFF)
291+
if (level == Level::Off)
286292
return;
287293

288294
std::shared_ptr<spdlog::logger> spd;
@@ -322,7 +328,7 @@ namespace vix::utils
322328
fmt::format_string<Args...> fmtstr,
323329
Args &&...args)
324330
{
325-
if (level == Level::OFF)
331+
if (level == Level::Off)
326332
return;
327333

328334
std::shared_ptr<spdlog::logger> spd;
@@ -357,7 +363,7 @@ namespace vix::utils
357363
[[noreturn]] void throwError(fmt::format_string<Args...> fmtstr, Args &&...args)
358364
{
359365
auto msg = fmt::format(fmtstr, std::forward<Args>(args)...);
360-
log(Level::ERROR, "{}", msg);
366+
log(Level::Error, "{}", msg);
361367
throw std::runtime_error(msg);
362368
}
363369

@@ -366,7 +372,7 @@ namespace vix::utils
366372
*/
367373
[[noreturn]] void throwError(const std::string &msg)
368374
{
369-
log(Level::ERROR, "{}", msg);
375+
log(Level::Error, "{}", msg);
370376
throw std::runtime_error(msg);
371377
}
372378

@@ -441,7 +447,7 @@ namespace vix::utils
441447
template <typename... Args>
442448
void logf(Level level, const std::string &msg, Args &&...kvpairs)
443449
{
444-
if (level == Level::OFF)
450+
if (level == Level::Off)
445451
return;
446452

447453
std::lock_guard<std::mutex> lock(mutex_);
@@ -500,7 +506,7 @@ namespace vix::utils
500506
*/
501507
static Level parseLevelFromEnv(
502508
std::string_view envName = "VIX_LOG_LEVEL",
503-
Level fallback = Level::WARN);
509+
Level fallback = Level::Warn);
504510

505511
/**
506512
* @brief Whether pretty JSON output should include ANSI colors.
@@ -514,22 +520,22 @@ namespace vix::utils
514520
{
515521
std::lock_guard<std::mutex> lock(mutex_);
516522
if (!spd_)
517-
return Level::OFF;
523+
return Level::Off;
518524

519525
const auto lvl = spd_->level();
520526
if (lvl == spdlog::level::trace)
521-
return Level::TRACE;
527+
return Level::Trace;
522528
if (lvl == spdlog::level::debug)
523-
return Level::DEBUG;
529+
return Level::Debug;
524530
if (lvl == spdlog::level::info)
525-
return Level::INFO;
531+
return Level::Info;
526532
if (lvl == spdlog::level::warn)
527-
return Level::WARN;
533+
return Level::Warn;
528534
if (lvl == spdlog::level::err)
529-
return Level::ERROR;
535+
return Level::Error;
530536
if (lvl == spdlog::level::critical)
531-
return Level::CRITICAL;
532-
return Level::OFF;
537+
return Level::Critical;
538+
return Level::Off;
533539
}
534540

535541
/**
@@ -556,19 +562,19 @@ namespace vix::utils
556562
{
557563
switch (level)
558564
{
559-
case Level::TRACE:
565+
case Level::Trace:
560566
return spdlog::level::trace;
561-
case Level::DEBUG:
567+
case Level::Debug:
562568
return spdlog::level::debug;
563-
case Level::INFO:
569+
case Level::Info:
564570
return spdlog::level::info;
565-
case Level::WARN:
571+
case Level::Warn:
566572
return spdlog::level::warn;
567-
case Level::ERROR:
573+
case Level::Error:
568574
return spdlog::level::err;
569-
case Level::CRITICAL:
575+
case Level::Critical:
570576
return spdlog::level::critical;
571-
case Level::OFF:
577+
case Level::Off:
572578
return spdlog::level::off;
573579
default:
574580
return spdlog::level::info;
@@ -715,19 +721,19 @@ namespace vix::utils
715721
{
716722
switch (level)
717723
{
718-
case Level::TRACE:
724+
case Level::Trace:
719725
return "trace";
720-
case Level::DEBUG:
726+
case Level::Debug:
721727
return "debug";
722-
case Level::INFO:
728+
case Level::Info:
723729
return "info";
724-
case Level::WARN:
730+
case Level::Warn:
725731
return "warn";
726-
case Level::ERROR:
732+
case Level::Error:
727733
return "error";
728-
case Level::CRITICAL:
734+
case Level::Critical:
729735
return "critical";
730-
case Level::OFF:
736+
case Level::Off:
731737
return "off";
732738
default:
733739
return "info";
@@ -1073,6 +1079,28 @@ namespace vix::utils
10731079
static std::string c_bool(std::string_view s, bool on) { return ansi_wrap("\033[35m", s, on); }
10741080
static std::string c_punc(std::string_view s, bool on) { return ansi_wrap("\033[90m", s, on); }
10751081

1082+
static inline const char *vix_getenv(const char *name) noexcept
1083+
{
1084+
#if defined(_WIN32)
1085+
// _dupenv_s returns heap memory we must free.
1086+
static thread_local std::string value;
1087+
value.clear();
1088+
1089+
char *buf = nullptr;
1090+
size_t len = 0;
1091+
1092+
if (_dupenv_s(&buf, &len, name) != 0 || !buf)
1093+
return nullptr;
1094+
1095+
value.assign(buf);
1096+
free(buf);
1097+
1098+
return value.empty() ? nullptr : value.c_str();
1099+
#else
1100+
return std::getenv(name);
1101+
#endif
1102+
}
1103+
10761104
/**
10771105
* @brief Whether console synchronization is enabled.
10781106
*
@@ -1082,7 +1110,7 @@ namespace vix::utils
10821110
*/
10831111
static bool console_sync_enabled()
10841112
{
1085-
if (const char *v = std::getenv("VIX_CONSOLE_SYNC"); v && *v)
1113+
if (const char *v = vix_getenv("VIX_CONSOLE_SYNC"); v && *v)
10861114
return std::string_view(v) != "0" && std::string_view(v) != "false";
10871115
return false;
10881116
}
@@ -1107,6 +1135,11 @@ namespace vix::utils
11071135
#undef VIX_UTILS_RESTORE_DEBUG_MACRO
11081136
#endif
11091137

1138+
#if defined(VIX_UTILS_RESTORE_INFO_MACRO)
1139+
#pragma pop_macro("INFO")
1140+
#undef VIX_UTILS_RESTORE_INFO_MACRO
1141+
#endif
1142+
11101143
#if defined(VIX_UTILS_RESTORE_ERROR_MACRO)
11111144
#pragma pop_macro("ERROR")
11121145
#undef VIX_UTILS_RESTORE_ERROR_MACRO

0 commit comments

Comments
 (0)