I want a log source per class like the basic_logger example from the docs
This works but I get a compiler error complaining about the constness when logging something from a const member function like so:
#include "boost/log/sources/channel_logger.hpp"
#include "boost/log/common.hpp"
#include "boost/log/utility/init/to_console.hpp"
#include "boost/log/utility/init/common_attributes.hpp"
class Test
{
public:
// this works, not a const function
void test1()
{
BOOST_LOG(m_logger) << "Test 1";
}
// this will not compile, const function
void test2() const
{
BOOST_LOG(m_logger) << "Test 2";
}
private:
boost::log::sources::channel_logger<std::string> m_logger;
};
int main()
{
boost::log::add_common_attributes();
boost::log::init_log_to_console();
Test t;
t.test1();
t.test2();
return 1;
}
In this example Test::test2
gives a compile error because its const and m_logger
is not. Test::test1
works fine.
How can this be fixed in a clean way without const_cast
, mutable
etc.
If the log is stored in the class, then of course you cannot modify it in a const
context.
I realise that you asked for something else, but I honestly think that mutable
is the appropriate solution here. This is exactly the use case that is why mutable
exists.