28#if defined(_WIN32) && defined(OGS_BUILD_WHEEL)
48template <
typename Mutex>
49class Fd1StdoutSink final :
public spdlog::sinks::base_sink<Mutex>
52 void sink_it_(spdlog::details::log_msg
const& msg)
override
54 spdlog::memory_buf_t formatted;
55 this->formatter_->format(msg, formatted);
56 _write(_fileno(stdout), formatted.data(),
57 static_cast<unsigned int>(formatted.size()));
60 void flush_()
override
72 std::cerr <<
"[" <<
mpi_rank <<
"] spdlog error: " << msg << std::endl;
78 std::cerr <<
"spdlog error: " << msg << std::endl;
89 using namespace spdlog::level;
90 std::map<std::string, level_enum> string_to_log_level = {
91 {
"none", off}, {
"critical", critical}, {
"error", err}, {
"warn", warn},
92 {
"info", info}, {
"debug", debug}, {
"all", trace}};
94 auto const level = string_to_log_level.find(level_string);
95 if (level == string_to_log_level.end())
97 ERR(
"'{:s}' is not a valid log level!", level_string);
100 console->set_level(level->second);
101 spdlog::set_default_logger(
console);
108#if defined(_WIN32) && defined(OGS_BUILD_WHEEL)
111#if defined(USE_PETSC) || defined(_OPENMP)
112 console = std::make_shared<spdlog::logger>(
113 "ogs", std::make_shared<Fd1StdoutSink<std::mutex>>());
115 console = std::make_shared<spdlog::logger>(
117 std::make_shared<Fd1StdoutSink<spdlog::details::null_mutex>>());
119 spdlog::register_logger(
console);
121#if defined(USE_PETSC) || defined(_OPENMP)
126 console = spdlog::stdout_color_mt(
"ogs");
128 console = spdlog::stdout_color_st(
"ogs");
132 spdlog::set_pattern(
"%^%l:%$ %v");
133 spdlog::set_error_handler(error_handler);
137 MPI_Initialized(&mpi_init);
141 spdlog::set_pattern(fmt::format(
"[{}] %^%l:%$ %v", mpi_rank));
142 spdlog::set_error_handler(mpi_error_handler);