[fix] reduce release log verbosity and enforce single instance

This commit is contained in:
dijunkun
2026-09-26 02:58:55 +08:00
parent b8389a8aa0
commit 9ef64cc00f
16 changed files with 316 additions and 75 deletions
+16 -28
View File
@@ -1,11 +1,7 @@
#include "rd_log.h"
#include <chrono>
#include <ctime>
#include <filesystem>
#include <iomanip>
#include <mutex>
#include <sstream>
#include <vector>
#include "spdlog/sinks/rotating_file_sink.h"
@@ -16,6 +12,7 @@ namespace crossdesk {
namespace {
std::string g_log_dir = "logs";
std::string g_logger_name = LOGGER_NAME;
std::once_flag g_logger_once_flag;
std::mutex g_logger_mutex;
std::shared_ptr<spdlog::logger> g_logger;
@@ -29,20 +26,20 @@ std::string NormalizeLogDirectory(const std::string& log_dir) {
} // namespace
void InitLogger(const std::string& log_dir) {
void InitLogger(const std::string& log_dir, const std::string& logger_name) {
const auto directory = NormalizeLogDirectory(log_dir);
std::lock_guard<std::mutex> lock(g_logger_mutex);
if (g_logger) {
if (directory != g_log_dir) {
if (directory != g_log_dir || logger_name != g_logger_name) {
g_logger->warn(
"InitLogger called after logger initialized. Ignoring log_dir: {}, "
"using previous log_dir: {}",
directory, g_log_dir);
"InitLogger called after logger initialized. Keeping logger {} in {}",
g_logger_name, g_log_dir);
}
return;
}
g_log_dir = directory;
g_logger_name = logger_name;
}
std::shared_ptr<spdlog::logger> get_logger() {
@@ -53,32 +50,23 @@ std::shared_ptr<spdlog::logger> get_logger() {
std::error_code ec;
std::filesystem::create_directories(g_log_dir, ec);
auto now = std::chrono::system_clock::now() + std::chrono::hours(8);
auto now_time = std::chrono::system_clock::to_time_t(now);
std::tm tm_info;
#ifdef _WIN32
gmtime_s(&tm_info, &now_time);
#else
gmtime_r(&now_time, &tm_info);
#endif
std::stringstream ss;
ss << LOGGER_NAME;
ss << std::put_time(&tm_info, "-%Y%m%d-%H%M%S.log");
std::string filename = g_log_dir + "/" + ss.str();
// Reuse the same rotation set across restarts. Timestamped base names
// give each launch its own backups and let the directory grow forever.
auto file_sink = std::make_shared<spdlog::sinks::rotating_file_sink_mt>(
g_log_dir + "/" + g_logger_name + ".log", 5 * 1024 * 1024, 3);
std::vector<spdlog::sink_ptr> sinks;
sinks.push_back(std::make_shared<spdlog::sinks::stdout_color_sink_mt>());
sinks.push_back(std::make_shared<spdlog::sinks::rotating_file_sink_mt>(
filename, 5 * 1024 * 1024, 3));
sinks.push_back(file_sink);
auto logger = std::make_shared<spdlog::logger>(LOGGER_NAME, sinks.begin(),
auto logger = std::make_shared<spdlog::logger>(g_logger_name, sinks.begin(),
sinks.end());
logger->set_level(SPDLOG_ACTIVE_LEVEL <= SPDLOG_LEVEL_DEBUG
? spdlog::level::debug
: spdlog::level::info);
logger->flush_on(spdlog::level::info);
spdlog::register_logger(logger);
logger->info("Logger initialized: path={}", filename);
logger->info("Logger initialized: path={}", file_sink->filename());
g_logger = std::move(logger);
});
+9 -4
View File
@@ -10,21 +10,26 @@
#include <memory>
#include <string>
#include "spdlog/spdlog.h"
#ifndef SPDLOG_ACTIVE_LEVEL
#define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_INFO
#endif
#include "spdlog/spdlog.h"
namespace crossdesk {
constexpr auto LOGGER_NAME = "crossdesk";
void InitLogger(const std::string& log_dir);
void InitLogger(const std::string& log_dir,
const std::string& logger_name = LOGGER_NAME);
std::shared_ptr<spdlog::logger> get_logger();
#define LOG_TRACE(...) SPDLOG_LOGGER_TRACE(get_logger(), __VA_ARGS__)
#define LOG_DEBUG(...) SPDLOG_LOGGER_DEBUG(get_logger(), __VA_ARGS__)
#define LOG_INFO(...) SPDLOG_LOGGER_INFO(get_logger(), __VA_ARGS__)
#define LOG_WARN(...) SPDLOG_LOGGER_WARN(get_logger(), __VA_ARGS__)
#define LOG_ERROR(...) SPDLOG_LOGGER_ERROR(get_logger(), __VA_ARGS__)
#define LOG_FATAL(...) SPDLOG_LOGGER_CRITICAL(get_logger(), __VA_ARGS__)
} // namespace crossdesk
#endif
#endif