Boost logo

Boost Users :

Subject: Re: [Boost-users] [LOG]: set_filter error in tutorial_filtering.cpp and per-sink instance filtering
From: Johan Lundberg (lundberj_at_[hidden])
Date: 2013-11-05 17:08:36


Self answer: I filed this problem as a bug,
https://svn.boost.org/trac/boost/ticket/9291 , and got a useful answer. A
workaround is found at
https://svn.boost.org/trac/boost/changeset/86404#file2

cheers, Johan

2013/10/16 Johan Lundberg <lundberj_at_[hidden]>

> Dear all,
> (this is my first post to this list)
>
> I'm trying to make a boost log sink that would filter on a severity level
> which should be
> thread-safely modifiable while logging is ongoing.
>
> On my way there I get errors while trying to compile this tutorial example:
>
> http://www.boost.org/doc/libs/1_54_0/libs/log/example/doc/tutorial_filtering.cpp
>
> The file as-is compiles and runs fine, but if I switch on the
> user-provided filtering
> function example by activating the block in #if 0 (and commenting out the
> other
> definition of init()) I get errors related to phoenix bind:
>
> The offending line is 155:
>
> sink->set_filter(phoenix::bind(&my_filter, severity, tag_attr));
>
> I would be grateful for advice on how to get that working. More details on
> that at the end of the mail.
>
> Now, assuming I get past the errors, what is a good way to add a per-sink
> log level filter? I may have
> several instances of the sink. To clarify: I know this is not the right
> syntax, but If I could use a custom
> functor or a C++11 lambda for a filter I would do something like this:
>
> using ATseverity=std::atomic<severity_level> ; // (severity is an enum)
>
> shared_ptr<ATseverity> shared_log_level = std::make_shared<ATseverity>(warning);
>
> sink->set_filter(
> [=shared_log_level]->bool(severity_level const& level, std::string const& tag){
>
> return level >= shared_log_level->get();
> });
>
> I could then store and modify the shared_log_level from elsewhere.
>
> Is there a right way to do this?
>
> cheers /Johan
>
>
> Details on the compilation error: I think this is the relevant
> part of the error message:
>
> /myboost154/include/boost/phoenix/core/preprocessed/expression_10.hpp:140:17: error: could not convert
>
> ‘boost::proto::make_expr<boost::phoenix::detail::tag::function_eval, boost::proto::domainns_::basic_default_domain,
> boost::phoenix::detail::function_ptr<2, bool, bool (*)(const
> boost::log::v2_mt_posix::value_ref<severity_level>&, const
>
> boost::log::v2_mt_posix::value_ref<std::basic_string<char> >&)>,
> boost::log::v2_mt_posix::expressions::attribute_keyword<tag::severity>,
> boost::log::v2_mt_posix::expressions::attribute_keyword<tag::tag_attr>
>
> >((* & a0), (* & a1), (* & a2))’
> from
> ‘const type {aka const
> boost::proto::exprns_::basic_expr<boost::phoenix::detail::tag::function_eval,
> boost::proto::argsns_::list3<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal,
>
> boost::proto::argsns_::term<boost::phoenix::detail::function_ptr<2,bool, bool (*)(const
> boost::log::v2_mt_posix::value_ref<severity_level>&,
> const boost::log::v2_mt_posix::value_ref<std::basic_string<char>>&)> >, 0l>,
>
> boost::log::v2_mt_posix::expressions::attribute_keyword<tag::severity>,
> boost::log::v2_mt_posix::expressions::attribute_keyword<tag::tag_attr> >, 3l>}’
> to
> ‘boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal,
>
> boost::proto::argsns_::term<boost::phoenix::detail::function_ptr<2,
> bool, bool (*)(const boost::log::v2_mt_posix::value_ref<severity_level>&,
> const boost::log::v2_mt_posix::value_ref<std::basic_string<char> >&)> >, 0l>::proto_child0 {
>
> aka
> boost::phoenix::detail::function_ptr<2, bool,
> bool (*)(const boost::log::v2_mt_posix::value_ref<severity_level>&,
> const boost::log::v2_mt_posix::value_ref<std::basic_string<char>
> >&)>}’ };
>
> I tried boost 1.54 and compiled with gcc 4.7.1 and 4.8.1 under Linux, with and without C++11 mode:
>
>
> g++ -std=gnu++11 -DBOOST_ALL_DYN_LINK boostlogexample.cpp -L $BOOST/lib/ -I $BOOST/include/ -pthread -lboost_system -lboost_log_setup -lboost_log \
> -lboost_date_time -lboost_thread -lrt -lboost_filesystem
>
>



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net