pairinteraction
A Rydberg Interaction Calculator
setup.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2024 Pairinteraction Developers
2// SPDX-License-Identifier: LGPL-3.0-or-later
3
5
7
8#include <cstdlib>
9#include <filesystem>
10#include <mutex>
11#include <spdlog/async.h>
12#include <spdlog/sinks/rotating_file_sink.h>
13#include <spdlog/sinks/stdout_color_sinks.h>
14#include <spdlog/spdlog.h>
15#include <vector>
16
17namespace pairinteraction {
18void setup() {
19
20 // Configure a logger
22
23 if (!std::filesystem::exists(logdir)) {
24 std::filesystem::create_directories(logdir);
25 } else if (!std::filesystem::is_directory(logdir)) {
26 throw std::runtime_error("Log path is not a directory.");
27 }
28
29 std::filesystem::path logfile = logdir / "cpp.log";
30
31 static std::once_flag flag_default_logger;
32 std::call_once(flag_default_logger, [&logfile] {
33 spdlog::init_thread_pool(8192, 1);
34 auto stdout_sink =
35 std::make_shared<spdlog::sinks::stdout_color_sink_mt>(spdlog::color_mode::always);
36 auto file_sink = std::make_shared<spdlog::sinks::rotating_file_sink_mt>(logfile.string(),
37 1048576 * 5, 10);
38 std::vector<spdlog::sink_ptr> sinks{stdout_sink, file_sink};
39 auto logger = std::make_shared<spdlog::async_logger>("logger", sinks.begin(), sinks.end(),
40 spdlog::thread_pool(),
41 spdlog::async_overflow_policy::block);
42 logger->set_pattern("[%Y-%m-%d %H:%M:%S.%e %t] [%^%l%$] [%s:%#] %v");
43 spdlog::set_default_logger(logger);
44
45 const char *log_level = std::getenv("SPDLOG_LEVEL");
46 if (log_level != nullptr) {
47 spdlog::set_level(spdlog::level::from_str(log_level));
48 }
49 });
50}
51} // namespace pairinteraction
std::filesystem::path get_cache_directory()
Definition: paths.hpp:29
void setup()
Definition: setup.cpp:18