7 #if !defined(MQTT_SETUP_LOG_HPP)
8 #define MQTT_SETUP_LOG_HPP
21 #include <boost/filesystem.hpp>
22 #include <boost/date_time/posix_time/posix_time_io.hpp>
26 #if defined(MQTT_USE_LOG)
35 void setup_log(std::map<std::string, severity_level> threshold) {
39 [](boost::log::record_view
const& rec, boost::log::formatting_ostream& strm) {
41 if (
auto v = boost::log::extract<boost::posix_time::ptime>(
"TimeStamp", rec)) {
46 new boost::posix_time::time_facet(
"%H:%M:%s")
49 strm << v.get() <<
" ";
52 if (
auto v = boost::log::extract<boost::log::thread_id>(
"ThreadID", rec)) {
53 strm <<
"T:" << v.get() <<
" ";
56 if (
auto v = boost::log::extract<severity_level>(
"Severity", rec)) {
57 strm <<
"S:" << std::setw(7) << std::left << v.get() <<
" ";
59 if (
auto v = boost::log::extract<channel>(
"Channel", rec)) {
60 strm <<
"C:" << std::setw(5) << std::left << v.get() <<
" ";
63 if (
auto v = boost::log::extract<std::string>(
"MqttFile", rec)) {
64 strm << boost::filesystem::path(v.get()).filename().string() <<
":";
66 if (
auto v = boost::log::extract<unsigned int>(
"MqttLine", rec)) {
67 strm << v.get() <<
" ";
69 if (
auto v = boost::log::extract<void const*>(
"MqttAddress", rec)) {
70 strm <<
"A:" << v.get() <<
" ";
74 if (
auto v = boost::log::extract<std::string>(
"MqttFunction", rec)) {
78 strm << rec[boost::log::expressions::smessage];
82 boost::shared_ptr<std::ostream> stream(&std::clog, boost::null_deleter());
84 using text_sink = boost::log::sinks::synchronous_sink<boost::log::sinks::text_ostream_backend>;
85 auto sink = boost::make_shared<text_sink>();
86 sink->locked_backend()->add_stream(stream);
87 sink->set_formatter(fmt);
91 (boost::log::attribute_value_set
const& avs) {
94 auto chan = boost::log::extract<channel>(
"Channel", avs);
95 auto sev = boost::log::extract<severity_level>(
"Severity", avs);
97 auto it = threshold.find(chan.get());
98 if (it == threshold.end())
return false;
99 return sev.get() >= it->second;
105 boost::log::core::get()->set_filter(fil);
106 boost::log::core::get()->add_sink(sink);
108 boost::log::add_common_attributes();
121 {
"mqtt_api", threshold },
122 {
"mqtt_cb", threshold },
123 {
"mqtt_impl", threshold },
124 {
"mqtt_broker", threshold },
131 template <
typename... Params>
void setup_log(Params &&...)
Definition: setup_log.hpp:132
constexpr std::remove_reference_t< T > && force_move(T &&t)
Definition: move.hpp:20
severity_level
Definition: log.hpp:37