23 #ifndef EDSP_LOGGER_HPP 24 #define EDSP_LOGGER_HPP 26 #include <edsp/thirdparty/spdlog/spdlog.h> 27 #include <edsp/thirdparty/spdlog/sinks/stdout_color_sinks.h> 28 #include <edsp/thirdparty/spdlog/sinks/basic_file_sink.h> 29 #include <edsp/thirdparty/termcolor/termcolor.hpp> 31 #include <type_traits> 34 namespace edsp {
inline namespace core {
36 inline namespace internal {
60 inline static void set_default_level(
levels type);
66 inline static levels default_level();
72 inline static void set_default_path(
const std::string& path);
80 inline static const std::string& default_path();
86 inline static void set_default_name(
const std::string& name);
92 inline static const std::string& default_name();
98 inline static void set_pattern(
const std::string& pattern);
108 inline logger(
const edsp::string_view& name,
const edsp::string_view& file,
109 levels message_type = levels::trace);
117 inline explicit logger(
const edsp::string_view& name,
levels message_type = levels::trace);
124 inline explicit logger(
levels message_type = levels::trace);
135 inline void set_level(
levels type);
153 inline const std::string& name()
const;
159 inline std::string str()
const;
176 template <
typename Char>
177 inline logger& operator<<(const std::basic_string<Char>& str);
179 template <
typename Char>
180 inline logger& operator<<(const edsp::basic_string_view<Char>& str);
190 static spdlog::level::level_enum& global_level() {
191 static spdlog::level::level_enum LEVEL = spdlog::level::trace;
201 static std::string& global_path() {
202 static std::string FILE{};
212 static std::string& global_name() {
213 static std::string NAME =
"console";
218 friend struct internal::logger_impl;
219 std::shared_ptr<spdlog::logger> logger_{
nullptr};
221 std::stringstream msg_;
224 inline namespace internal {
227 return stream <<
'\t';
231 return stream <<
'\n';
235 stream.msg_ << termcolor::colorize;
241 stream.msg_ << termcolor::colorize;
247 stream.msg_ << termcolor::colorize;
253 stream.msg_ << termcolor::colorize;
259 stream.msg_ << termcolor::colorize;
265 stream.msg_ << termcolor::colorize;
271 stream.msg_ << termcolor::colorize;
277 stream.msg_ << termcolor::colorize;
283 stream.msg_ << termcolor::colorize;
289 stream.msg_ << termcolor::nocolorize;
423 logger_ = spdlog::get(name.data());
425 logger_ = spdlog::basic_logger_mt(name.data(), file.data());
430 logger_ = spdlog::get(name.data());
432 logger_ = spdlog::stdout_color_mt(name.data());
437 const auto&
name = global_name();
438 logger_ = spdlog::get(
name);
440 const auto& path = global_path();
442 logger_ = spdlog::stdout_color_mt(
name);
444 logger_ = spdlog::basic_logger_mt(
name, path);
454 logger_->trace(msg_.str());
457 logger_->debug(msg_.str());
460 logger_->info(msg_.str());
462 case levels::warning:
463 logger_->warn(msg_.str());
465 case levels::critical:
466 logger_->critical(msg_.str());
469 logger_->error(msg_.str());
482 switch (global_level()) {
483 case spdlog::level::trace:
484 return levels::trace;
485 case spdlog::level::debug:
486 return levels::debug;
487 case spdlog::level::info:
489 case spdlog::level::warn:
490 return levels::warning;
491 case spdlog::level::critical:
492 return levels::critical;
493 case spdlog::level::err:
494 return levels::error;
501 auto& LEVEL = global_level();
504 LEVEL = spdlog::level::trace;
507 LEVEL = spdlog::level::debug;
510 LEVEL = spdlog::level::info;
512 case levels::warning:
513 LEVEL = spdlog::level::warn;
515 case levels::critical:
516 LEVEL = spdlog::level::critical;
519 LEVEL = spdlog::level::err;
522 LEVEL = spdlog::level::off;
530 logger_->set_level(spdlog::level::trace);
533 logger_->set_level(spdlog::level::debug);
536 logger_->set_level(spdlog::level::info);
538 case levels::warning:
539 logger_->set_level(spdlog::level::warn);
541 case levels::critical:
542 logger_->set_level(spdlog::level::critical);
545 logger_->set_level(spdlog::level::err);
548 logger_->set_level(spdlog::level::off);
554 switch (logger_->level()) {
555 case spdlog::level::trace:
556 return levels::trace;
557 case spdlog::level::debug:
558 return levels::debug;
559 case spdlog::level::info:
561 case spdlog::level::warn:
562 return levels::warning;
563 case spdlog::level::critical:
564 return levels::critical;
565 case spdlog::level::err:
566 return levels::error;
573 return logger_->name();
577 global_path() = path;
581 return global_path();
585 return global_name();
589 global_name() =
name;
593 return manipulator(*
this);
600 template <
typename Char>
601 logger& logger::operator<<(const std::basic_string<Char>&
str) {
606 template <
typename Char>
607 logger& logger::operator<<(const edsp::basic_string_view<Char>&
str) {
668 spdlog::set_pattern(pattern);
673 #define eTrace() edsp::logger(edsp::logger::levels::trace) 674 #define eInfo() edsp::logger(edsp::logger::levels::info) 675 #define eDebug() edsp::logger(edsp::logger::levels::debug) 676 #define eWarning() edsp::logger(edsp::logger::levels::warning) 677 #define eCritical() edsp::logger(edsp::logger::levels::critical) 678 #define eError() edsp::logger(edsp::logger::levels::error) 680 #endif //EDSP_LOGGER_HPP logger & green(logger &stream)
Updates the logger output color to green.
Definition: logger.hpp:380
std::function< edsp::core::logger &(edsp::core::logger &)> logger_manipulator
Definition: logger.hpp:162
Definition: logger.hpp:48
Definition: logger.hpp:51
std::string str() const
Returns the current string buffer.
Definition: logger.hpp:596
~logger()
Default destructor.
Definition: logger.hpp:450
static void set_pattern(const std::string &pattern)
Updates the pattern of the displayed messages.
Definition: logger.hpp:667
static const std::string & default_path()
Returns the current file path of the default logger.
Definition: logger.hpp:580
logger & yellow(logger &stream)
Updates the logger output color to yellow.
Definition: logger.hpp:334
static void set_default_level(levels type)
Updates the minimum level to be logged.
Definition: logger.hpp:500
logger & space()
Writes an space character to the stream and returns a reference to the stream.
Definition: logger.hpp:476
levels level()
Returns the default level.
Definition: logger.hpp:553
static const std::string & default_name()
Returns the name of the default logger.
Definition: logger.hpp:584
Definition: logger.hpp:49
logger & white(logger &stream)
Updates the logger output color to white.
Definition: logger.hpp:362
const std::string & name() const
Returns the name of the logger.
Definition: logger.hpp:572
logger(const edsp::string_view &name, const edsp::string_view &file, levels message_type=levels::trace)
Constructs a logger to record log messages of message_type for the file.
Definition: logger.hpp:420
static void set_default_name(const std::string &name)
Updates the name of the default logger.
Definition: logger.hpp:588
logger & blue(logger &stream)
Updates the logger output color to blue.
Definition: logger.hpp:343
logger & magenta(logger &stream)
Updates the logger output color to magenta.
Definition: logger.hpp:371
logger & red(logger &stream)
Updates the logger output color to red.
Definition: logger.hpp:325
logger & grey(logger &stream)
Updates the logger output color to grey.
Definition: logger.hpp:389
logger & endl(logger &stream)
Inserts the end line character (' ') to the current streaming.
Definition: logger.hpp:316
logger & bold(logger &stream)
Updates the logger output text style to bold style.
Definition: logger.hpp:398
logger & cyan(logger &stream)
Updates the logger output color to cyan.
Definition: logger.hpp:353
Definition: logger.hpp:40
logger & reset(logger &stream)
Resets the logger to default configuration.
Definition: logger.hpp:416
logger & operator<<(logger_manipulator manipulator)
Definition: logger.hpp:592
static levels default_level()
Returns the default level.
Definition: logger.hpp:481
Definition: logger.hpp:52
Definition: logger.hpp:50
levels
Definition: logger.hpp:46
static void set_default_path(const std::string &path)
Updates the default file path of the file holding the default logger.
Definition: logger.hpp:576
logger & tab(logger &stream)
Inserts the tabular character ('') to the current streaming.
Definition: logger.hpp:306
logger & endc(logger &stream)
End of color, styled streaming.
Definition: logger.hpp:407
void set_level(levels type)
Updates the minimum level to be logged.
Definition: logger.hpp:527
Definition: amplifier.hpp:29
logger & operator<<(logger &stream, fft_lib lib)
Definition: library_info.hpp:38