2025-03-17 01:58:37 +08:00
|
|
|
#include "logger.h"
|
2025-03-18 16:40:16 +08:00
|
|
|
#include "config.h"
|
2025-03-17 01:58:37 +08:00
|
|
|
#include <sstream>
|
|
|
|
#include <iomanip>
|
2025-03-18 16:40:16 +08:00
|
|
|
#include <filesystem>
|
2025-03-17 01:58:37 +08:00
|
|
|
|
|
|
|
namespace humanus {
|
|
|
|
|
|
|
|
std::shared_ptr<spdlog::logger> define_log_level(spdlog::level::level_enum print_level,
|
|
|
|
spdlog::level::level_enum logfile_level,
|
|
|
|
std::string name) {
|
|
|
|
_print_level = print_level;
|
|
|
|
|
|
|
|
auto current_date = std::chrono::system_clock::now();
|
|
|
|
auto in_time_t = std::chrono::system_clock::to_time_t(current_date);
|
|
|
|
|
|
|
|
std::stringstream ss;
|
|
|
|
std::tm tm_info = *std::localtime(&in_time_t);
|
|
|
|
ss << std::put_time(&tm_info, "%Y%m%d");
|
|
|
|
std::string formatted_date = ss.str(); // YYYYMMDD
|
|
|
|
|
|
|
|
std::string log_name = name.empty() ? formatted_date : name + "_" + formatted_date;
|
|
|
|
std::string log_file_path = (PROJECT_ROOT / "logs" / (log_name + ".log")).string();
|
|
|
|
|
2025-03-17 16:35:11 +08:00
|
|
|
// Ensure the log directory exists
|
2025-03-17 01:58:37 +08:00
|
|
|
std::filesystem::create_directories(PROJECT_ROOT / "logs");
|
|
|
|
|
2025-03-17 16:35:11 +08:00
|
|
|
// Reset the log output
|
2025-03-17 01:58:37 +08:00
|
|
|
std::shared_ptr<spdlog::logger> _logger = std::make_shared<spdlog::logger>(log_name);
|
|
|
|
|
|
|
|
auto stderr_sink = std::make_shared<spdlog::sinks::stderr_color_sink_mt>();
|
|
|
|
stderr_sink->set_level(print_level);
|
|
|
|
_logger->sinks().push_back(stderr_sink);
|
|
|
|
|
|
|
|
auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>(log_file_path, false);
|
|
|
|
file_sink->set_level(logfile_level);
|
|
|
|
_logger->sinks().push_back(file_sink);
|
|
|
|
|
|
|
|
return _logger;
|
|
|
|
}
|
|
|
|
|
|
|
|
} // namespace humanus
|