|
27 | 27 | #define strcasecmp _stricmp |
28 | 28 | #endif |
29 | 29 |
|
30 | | -#include "spdlog/spdlog.h" |
31 | 30 | #include "common.h" |
32 | 31 |
|
33 | 32 | namespace grk |
@@ -387,5 +386,70 @@ void infoCallback(const char* msg, [[maybe_unused]] void* client_data) |
387 | 386 | { |
388 | 387 | spdlog::default_logger()->info(msg); |
389 | 388 | } |
| 389 | +void debugCallback(const char* msg, [[maybe_unused]] void* client_data) |
| 390 | +{ |
| 391 | + spdlog::default_logger()->debug(msg); |
| 392 | +} |
| 393 | + |
| 394 | +void traceCallback(const char* msg, [[maybe_unused]] void* client_data) |
| 395 | +{ |
| 396 | + spdlog::default_logger()->trace(msg); |
| 397 | +} |
| 398 | + |
| 399 | + |
| 400 | +// Configuration function |
| 401 | +void configureLogging(const std::string& logfile) { |
| 402 | + // Step 1: Set up the logger |
| 403 | + std::shared_ptr<spdlog::logger> logger; |
| 404 | + if (!logfile.empty()) { |
| 405 | + logger = spdlog::basic_logger_mt("grk", logfile); // File logger |
| 406 | + } else { |
| 407 | + // Console logger with color |
| 408 | + auto sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>(); |
| 409 | + logger = std::make_shared<spdlog::logger>("grk", sink); |
| 410 | + } |
| 411 | + spdlog::set_default_logger(logger); |
| 412 | + |
| 413 | + // Step 2: Determine log level |
| 414 | + spdlog::level::level_enum log_level = spdlog::level::err; // Default to errors only |
| 415 | + |
| 416 | + const char* debug_env = std::getenv("GRK_DEBUG"); |
| 417 | + if (debug_env) { |
| 418 | + int level = std::atoi(debug_env); |
| 419 | + switch (level) { |
| 420 | + case 0: log_level = spdlog::level::off; break; |
| 421 | + case 1: log_level = spdlog::level::err; break; |
| 422 | + case 2: log_level = spdlog::level::warn; break; |
| 423 | + case 3: log_level = spdlog::level::info; break; |
| 424 | + case 4: log_level = spdlog::level::debug; break; |
| 425 | + case 5: log_level = spdlog::level::trace; break; |
| 426 | + default: |
| 427 | + if (level > 5) log_level = spdlog::level::trace; // Cap at trace |
| 428 | + break; |
| 429 | + } |
| 430 | + } else { |
| 431 | + log_level = spdlog::level::off; |
| 432 | + } |
| 433 | + spdlog::set_level(log_level); |
| 434 | + spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%^%l%$] %v"); |
| 435 | + |
| 436 | + // Step 3: Set up grk_msg_handlers |
| 437 | + grk_msg_handlers handlers = { |
| 438 | + infoCallback, |
| 439 | + nullptr, |
| 440 | + debugCallback, |
| 441 | + nullptr, |
| 442 | + traceCallback, |
| 443 | + nullptr, |
| 444 | + warningCallback, |
| 445 | + nullptr, |
| 446 | + errorCallback, // Always active |
| 447 | + nullptr |
| 448 | + }; |
| 449 | + |
| 450 | + grk_set_msg_handlers(handlers); |
| 451 | + |
| 452 | +} |
| 453 | + |
390 | 454 |
|
391 | 455 | } // namespace grk |
0 commit comments