void LoggerImpl::init0()

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);
}