// SPDX-FileCopyrightText: 2024 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #pragma once #include #include #include #include #include #include #include namespace spdlog { class logger; } class LogBufferSink; class Logger { std::shared_ptr spdlog_logger; std::shared_ptr buffer; // only on a Buffered() logger explicit Logger(std::shared_ptr sink); std::string service; std::string hostname; public: Logger(const std::string &service_name, const std::string &file_name = ""); void ErrorException(const std::exception &e); void Info(const std::string& msg) { spdlog_logger->info(msg); } void Warning(const std::string& msg) { spdlog_logger->warn(msg); } void Error(const std::string& msg) { spdlog_logger->error(msg); } void Debug(const std::string& msg) { spdlog_logger->debug(msg); } template void Info(fmt::format_string fmt, Args &&... args) { spdlog_logger->info(fmt, std::forward(args)...); } template void Error(fmt::format_string fmt, Args &&... args) { spdlog_logger->error(fmt, std::forward(args)...); } template void Debug(fmt::format_string fmt, Args &&... args) { spdlog_logger->debug(fmt, std::forward(args)...); } template void Warning(fmt::format_string fmt, Args &&... args) { spdlog_logger->warn(fmt, std::forward(args)...); } Logger& Verbose(bool input); // A logger that keeps its lines instead of printing them, for work run beside other work that // logs: ReplayInto hands them to `to` afterwards, in order and as one block, so the two do not // interleave. static Logger Buffered(); void ReplayInto(Logger &to) const; };