From b50d520999ce41b5d8572238c02d480568b564fa Mon Sep 17 00:00:00 2001 From: Benichou Date: Thu, 26 Jan 2017 11:00:46 +0100 Subject: [PATCH] Add support of std::stream for logger Logger can be used as a std::ostream. // Console logger with color auto console = spd::stdout_color_mt("console"); console->info() << "Welcome to spdlog!"; console->error() << "Some error message with arg" << 1 << ".."; --- include/spdlog/details/logger_impl.h | 34 ++++++++++++++++++++++++++++ include/spdlog/details/stream_impl.h | 29 ++++++++++++++++++++++++ include/spdlog/logger.h | 13 +++++++++++ include/spdlog/stream.h | 26 +++++++++++++++++++++ 4 files changed, 102 insertions(+) create mode 100644 include/spdlog/details/stream_impl.h create mode 100644 include/spdlog/stream.h diff --git a/include/spdlog/details/logger_impl.h b/include/spdlog/details/logger_impl.h index 2b27f105..2de9d6d3 100644 --- a/include/spdlog/details/logger_impl.h +++ b/include/spdlog/details/logger_impl.h @@ -197,8 +197,42 @@ inline void spdlog::logger::critical(const T& msg) log(level::critical, msg); } +inline spdlog::ostream spdlog::logger::log(level::level_enum lvl) +{ + if (!should_log(lvl)) + + return ostream(this, lvl); +} + +inline spdlog::ostream spdlog::logger::trace() +{ + return log(level::trace); +} +inline spdlog::ostream spdlog::logger::debug() +{ + return log(level::debug); +} +inline spdlog::ostream spdlog::logger::info() +{ + return log(level::info); +} + +inline spdlog::ostream spdlog::logger::warn() +{ + return log(level::warn); +} + +inline spdlog::ostream spdlog::logger::error() +{ + return log(level::err); +} + +inline spdlog::ostream spdlog::logger::critical() +{ + return log(level::critical); +} // // name and level diff --git a/include/spdlog/details/stream_impl.h b/include/spdlog/details/stream_impl.h new file mode 100644 index 00000000..23661e32 --- /dev/null +++ b/include/spdlog/details/stream_impl.h @@ -0,0 +1,29 @@ +// +// Copyright(c) 2017 Benoit Leforestier. +// Distributed under the MIT License (http://opensource.org/licenses/MIT) +// + +#pragma once + +template +spdlog::basic_streambuf::basic_streambuf(spdlog::logger* plogger, spdlog::level::level_enum lvl) : +{ +} + +template +spdlog::basic_streambuf::basic_streambuf(basic_streambuf&& rhs) : +{ +} + +template +spdlog::basic_streambuf::~basic_streambuf() +{ + +} + +template +std::streamsize spdlog::basic_streambuf::xsputn(const char_type* __s, std::streamsize __n) +{ + + +} diff --git a/include/spdlog/logger.h b/include/spdlog/logger.h index a2deb51d..095af8d5 100644 --- a/include/spdlog/logger.h +++ b/include/spdlog/logger.h @@ -14,6 +14,7 @@ #include #include +#include #include #include @@ -52,6 +53,14 @@ public: template void error(const T&); template void critical(const T&); + ostream log(level::level_enum lvl); + ostream trace(); + ostream debug(); + ostream info(); + ostream warn(); + ostream error(); + ostream critical(); + bool should_log(level::level_enum) const; void set_level(level::level_enum); level::level_enum level() const; @@ -71,6 +80,9 @@ public: const std::vector& sinks() const; protected: + template + friend class basic_streambuf; + virtual void _sink_it(details::log_msg&); virtual void _set_pattern(const std::string&); virtual void _set_formatter(formatter_ptr); @@ -92,3 +104,4 @@ protected: } #include +#include diff --git a/include/spdlog/stream.h b/include/spdlog/stream.h new file mode 100644 index 00000000..dc1f5179 --- /dev/null +++ b/include/spdlog/stream.h @@ -0,0 +1,26 @@ +// +// Copyright(c) 2017 Benoit Leforestier. +// Distributed under the MIT License (http://opensource.org/licenses/MIT) +// + +#pragma once + +#include + +namespace spdlog +{ + + + + + + + + + + + + + + +}