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() {}
};
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);
std::unique_ptr<sink> remove_sink(sink * s);

View file

@ -1,4 +1,5 @@
#include <psemek/log/log.hpp>
#include <psemek/util/to_string.hpp>
#include <chrono>
#include <ctime>
@ -98,14 +99,15 @@ namespace psemek::log
struct default_sink_impl
: 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))
, level_(l)
, min_(min)
, max_(max)
{}
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 tm = safe_localtime(time);
@ -130,7 +132,8 @@ namespace psemek::log
private:
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");
}
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)

View file

@ -22,7 +22,8 @@ int main(int argc, char ** argv) try
log::level const stdio_log_level = log::level::debug;
#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");
auto const factory = app::make_application_factory();