Example
Before:
#define L_ BOOST_LOG_USE_LOG_IF_FILTER(g_l, g_log_filter->is_enabled() ) g_l->writer().add_formatter( formatter::idx(), "[%] " ); g_l->writer().add_formatter( formatter::append_newline_if_needed() ); g_l->writer().add_destination( destination::file("out.txt") ); g_l->mark_as_initialized(); g_log_filter->set_enabled(false);
After:
#define L_ BOOST_LOG_USE_LOG_IF_FILTER(g_l(), g_log_filter()->is_enabled() ) g_l()->writer().add_formatter( formatter::idx(), "[%] " ); g_l()->writer().add_formatter( formatter::append_newline_if_needed() ); g_l()->writer().add_destination( destination::file("out.txt") ); g_l()->mark_as_initialized(); g_log_filter()->set_enabled(false);
I've gotten a bit of feedback on my extensive use of macros, and some of those being rather complex. And lately I've re-analyzed the library, see where implementation could be simpler, etc., and the main part was - macros.
More to the point, declaring/defining a log/filter should be simpler - the macros for doing this should be simpler.
Previously, I wanted to abstract away the fact that when using BOOST_LOG_DECLARE/DEFINE, internally we'd be creating a function, but use it as a variable:
// before version v0.20 BOOST_DEFINE_LOG(g_l, logger_type) // in code, "g_l" is used like a variable g_l->writer().add_formatter( formatter::idx(), "[%] " );
However, g_l
was a variable which always forwarded to a function. Making this possible required quite a bit of trickery, and complicated the implementation of BOOST_LOG_DECLARE/DEFINE.
And even worse, extending them would be a nightmare: Basically I wanted to allow exporting a logger, for instance, from a DLL to an application. With the previous syntax, it would be very complex to implement.
So, to make it easier, now, BOOST_LOG_DECLARE/DEFINE declare/define the function directly (as opposed to before, when they did define a function with a different name, and then define a variable referencing that function).
To understand why BOOST_LOG_DECLARE/DEFINE declare/defines a function, as opposed to a variable, see Rationale for - Why BOOST_LOG_DECLARE/DEFINE define a function, instead of a variable.