[boost::log] how to format a record message
I have a project which has a handy stream filter in the formatter which indents newlines in logged messages to some depth à la: I/O [- 2 +] <loadedData> { <s> <p> <o> . <s> <p> <o2> . } </loadedData> (No, I'm not using an XML decorator above, though perhaps I should be.) I've maintained this for several generations of boost::log, e.g. #if (BOOST_VERSION > 104600) // could use (BOOST_LOG_COMPATIBILITY == "1.46") if cpp compared strings sink->set_formatter(&LineIndenter); #else backend->set_formatter(&LineIndenter); #endif but now that boost::log's released (1000s of thanks!!!), I'd like to switch to a channel_severity_filter. I had a custom formatter before in order to fiddle with the rec.message: inline void LineIndenter (std::ostream& strm, logging::record const& rec) { std::stringstream ss; oprfxnstream prfxstr(ss.rdbuf(), depth, ' '); ... stuff with attrs prfxstr << rec.message(); strm << ss.str(); } That member seems to be gone from logging::record and besides, it'd be nicer to use something like: boost::log::add_console_log (std::clog, boost::log::keywords::filter = min_severity || severity >= critical, boost::log::keywords::format = (boost::log::expressions::stream << line_id << ": <" << severity << "> [" << channel << "] " << lineIndenter(boost::log::expressions::smessage) ) ); I haven't figured out the signature for lineIndenter. I have the impression that I'm implementing a decorator like boost/log/expressions/formatters/c_decorator.hpp . So what's an easy way to wrap the attached stream filter (or a subclass constructed with some necessary constants) and pass it to a formatter? -- -ericP
participants (1)
-
Eric Prud'hommeaux