in cpp/source/log/LoggerImpl.cpp [59:124]
void LoggerImpl::init0() {
if (log_home_.empty()) {
char* home = getenv(USER_HOME_ENV);
if (home) {
log_home_.append(home);
} else {
log_home_.append(fs::temp_directory_path().string());
}
log_home_.append(LOG_FILE);
}
// Create directories if necessary
fs::path log_file(log_home_);
fs::path log_dir = log_file.parent_path();
if (!fs::exists(log_dir)) {
if (!fs::create_directories(log_dir)) {
std::cerr << "Failed to mkdir " << log_dir << std::endl;
abort();
}
}
std::cout << "RocketMQ log files path: " << log_dir.c_str() << std::endl;
if (pattern_.empty()) {
pattern_ = DEFAULT_PATTERN;
}
console_sink_ = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
setLevel(console_sink_, console_level_);
console_sink_->set_pattern(pattern_);
file_sink_ = std::make_shared<spdlog::sinks::rotating_file_sink_mt>(log_home_, file_size_, file_count_,
/*rotate_on_open=*/false);
file_sink_->set_pattern(pattern_);
setLevel(file_sink_, level_);
// std::make_shared does not with initializer_list.
auto default_logger =
std::make_shared<spdlog::logger>(LOGGER_NAME, spdlog::sinks_init_list{console_sink_, file_sink_});
default_logger->flush_on(spdlog::level::warn);
Level logger_level =
static_cast<Level>(std::min(static_cast<std::uint8_t>(level_), static_cast<std::uint8_t>(console_level_)));
switch (logger_level) {
case Level::Trace: {
default_logger->set_level(spdlog::level::trace);
break;
}
case Level::Debug: {
default_logger->set_level(spdlog::level::debug);
break;
}
case Level::Info: {
default_logger->set_level(spdlog::level::info);
break;
}
case Level::Warn: {
default_logger->set_level(spdlog::level::warn);
break;
}
default: {
default_logger->set_level(spdlog::level::info);
break;
}
}
spdlog::flush_every(std::chrono::seconds(1));
spdlog::set_default_logger(default_logger);
}