Setup default logging sinks to output to stdout/stderr based on log level

This commit is contained in:
Nikita Lisitsa 2023-08-06 12:56:07 +03:00
parent 128abc453e
commit 248bd049db
3 changed files with 12 additions and 8 deletions

View file

@ -47,7 +47,7 @@ namespace psemek::log
virtual ~sink() {} virtual ~sink() {}
}; };
std::unique_ptr<sink> default_sink(std::unique_ptr<io::ostream> stream, level l); std::unique_ptr<sink> default_sink(std::unique_ptr<io::ostream> stream, level min, level max);
sink * add_sink(std::unique_ptr<sink> s); sink * add_sink(std::unique_ptr<sink> s);
std::unique_ptr<sink> remove_sink(sink * s); std::unique_ptr<sink> remove_sink(sink * s);

View file

@ -1,4 +1,5 @@
#include <psemek/log/log.hpp> #include <psemek/log/log.hpp>
#include <psemek/util/to_string.hpp>
#include <chrono> #include <chrono>
#include <ctime> #include <ctime>
@ -98,14 +99,15 @@ namespace psemek::log
struct default_sink_impl struct default_sink_impl
: sink : sink
{ {
default_sink_impl(std::unique_ptr<io::ostream> stream, level l) default_sink_impl(std::unique_ptr<io::ostream> stream, level min, level max)
: stream_(std::move(stream)) : stream_(std::move(stream))
, level_(l) , min_(min)
, max_(max)
{} {}
void put_message(message const & msg) override void put_message(message const & msg) override
{ {
if (msg.level < level_) return; if (msg.level < min_ || msg.level > max_) return;
auto const time = clock::to_time_t(msg.time); auto const time = clock::to_time_t(msg.time);
auto const tm = safe_localtime(time); auto const tm = safe_localtime(time);
@ -130,7 +132,8 @@ namespace psemek::log
private: private:
std::unique_ptr<io::ostream> stream_; std::unique_ptr<io::ostream> stream_;
level level_; level min_;
level max_;
}; };
} }
@ -184,9 +187,9 @@ namespace psemek::log
put_message(level::info, "Thread \"" + name + "\" unregistered"); put_message(level::info, "Thread \"" + name + "\" unregistered");
} }
std::unique_ptr<sink> default_sink(std::unique_ptr<io::ostream> stream, level l) std::unique_ptr<sink> default_sink(std::unique_ptr<io::ostream> stream, level min, level max)
{ {
return std::make_unique<default_sink_impl>(std::move(stream), l); return std::make_unique<default_sink_impl>(std::move(stream), min, max);
} }
sink * add_sink(std::unique_ptr<sink> s) sink * add_sink(std::unique_ptr<sink> s)

View file

@ -22,7 +22,8 @@ int main(int argc, char ** argv) try
log::level const stdio_log_level = log::level::debug; log::level const stdio_log_level = log::level::debug;
#endif #endif
log::add_sink(log::default_sink(io::std_out(), stdio_log_level)); log::add_sink(log::default_sink(io::std_out(), stdio_log_level, log::level::info));
log::add_sink(log::default_sink(io::std_err(), log::level::warning, log::level::error));
log::register_thread("main"); log::register_thread("main");
auto const factory = app::make_application_factory(); auto const factory = app::make_application_factory();