12#include <spdlog/sinks/basic_file_sink.h>
13#include <spdlog/sinks/stdout_color_sinks.h>
14#include <spdlog/spdlog.h>
27inline std::shared_ptr<spdlog::sinks::stdout_color_sink_mt>&
console_sink() {
28 static std::shared_ptr<spdlog::sinks::stdout_color_sink_mt> sink;
41 static spdlog::level::level_enum level = spdlog::level::info;
59inline void init(
const std::string& log_file =
"") {
60 console_sink() = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
79 if (!log_file.empty()) {
80 auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>(log_file,
true);
81 file_sink->set_pattern(
"%v");
82 file_sink->set_level(spdlog::level::debug);
83 sinks.push_back(file_sink);
86 auto logger = std::make_shared<spdlog::logger>(
"q3", sinks.begin(), sinks.end());
89 logger->flush_on(spdlog::level::warn);
90 spdlog::set_default_logger(logger);
95 spdlog::level::level_enum parsed_level = spdlog::level::from_str(level);
96 spdlog::set_level(parsed_level);
113inline void apply_verbosity(
const std::string& verbosity,
const std::string& explicit_log_level) {
114 if (!explicit_log_level.empty()) {
117 if (verbosity ==
"high") {
134 spdlog::default_logger()->flush();
151 spdlog::set_level(spdlog::level::off);
166inline void fatal(
const std::string& message) {
167 std::fputs(message.c_str(), stderr);
168 std::fputc(
'\n', stderr);
173template <
typename... Args>
174inline void trace(spdlog::format_string_t<Args...> fmt, Args&&... args) {
175 spdlog::trace(fmt, std::forward<Args>(args)...);
178template <
typename... Args>
179inline void debug(spdlog::format_string_t<Args...> fmt, Args&&... args) {
180 spdlog::debug(fmt, std::forward<Args>(args)...);
183template <
typename... Args>
inline void info(spdlog::format_string_t<Args...> fmt, Args&&... args) {
184 spdlog::info(fmt, std::forward<Args>(args)...);
187template <
typename... Args>
inline void warn(spdlog::format_string_t<Args...> fmt, Args&&... args) {
188 spdlog::warn(fmt, std::forward<Args>(args)...);
191template <
typename... Args>
192inline void error(spdlog::format_string_t<Args...> fmt, Args&&... args) {
193 spdlog::error(fmt, std::forward<Args>(args)...);
206inline void section(
const std::string& title) {
209 info(
" {}", std::string(title.size(),
'-'));
void section(const std::string &title)
void fatal(const std::string &message)
void set_console_level_unless_silenced(spdlog::level::level_enum level)
void debug(spdlog::format_string_t< Args... > fmt, Args &&... args)
void init(const std::string &log_file="")
void warn(spdlog::format_string_t< Args... > fmt, Args &&... args)
spdlog::level::level_enum & baseline_logger_level()
void error(spdlog::format_string_t< Args... > fmt, Args &&... args)
void info(spdlog::format_string_t< Args... > fmt, Args &&... args)
void trace(spdlog::format_string_t< Args... > fmt, Args &&... args)
void apply_verbosity(const std::string &verbosity, const std::string &explicit_log_level)
void set_level(const std::string &level)
Set log level: "trace", "debug", "info", "warn", "error", "off".
std::shared_ptr< spdlog::sinks::stdout_color_sink_mt > & console_sink()