Below is the very simple use of boost::log::set_filter,
#include <boost/log/trivial.hpp>
#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/utility/setup/file.hpp>
namespace logging = boost::log;
void test()
{
logging::add_file_log("sample.log")->set_filter(
logging::trivial::severity >= logging::trivial::info
);
}
According to definition of set_filter,
template< typename FunT >
void set_filter(FunT const& filter)
{
BOOST_LOG_EXPR_IF_MT(boost::log::aux::exclusive_lock_guard< mutex_type > lock(m_Mutex);)
m_Filter = filter;
}
filter is supposed to be a function pointer or lambda expression. What is logging::trivial::severity >= logging::trivial::info
and how it is casted to a function?
The result of a user-defined >=
can be any type, it does not have to be bool
. In this case, the library author defined a >=
that returns a function object.
As a sketch, it's something like this
struct severity_t {} severity;
enum severity_level {
info,
...
};
struct greater_equal_filter
{
severity_level level;
bool operator()(severity_level other) { return other >= level; }
};
greater_equal_filter operator>=(severity_t, severity_level level) {
return { level };
}