
Greer, Joe wrote:
-----Original Message----- From: boost-bounces@lists.boost.org [mailto:boost-bounces@lists.boost.org] On Behalf Of Richard Day
Simple examples.
DBG_LOG( "Null pointer we are now dying a hard death" ); vs logger << CLASS_WARNING << "File not found : " << filename << endl;
With two completely different in many respects requirements satisfying everyones needs is the issue.
[Joe] I agree. In fact, in the system I currently use, my usage pattern is a hybrid. My log messages look something like:
CDBG(TRACE, "network") << "Some network related message." << endl;
Maybe optional log information (channel, type, loglevel, ...) could all be passed similar to manipulators in std::stream. This would keep the basic interface clean (just << operator) and extensible. There would be no need to anticipate numbers/types of function arguments. If people prefer a functional interface, then they could go for either #define MYLOG1(LEVEL,CHANNEL,MESSAGE) logger << setLevel(LEVEL) << setChannel(CHANNEL) << MESSAGE << endl MYLOG1(WARNING,"Debug","Caught Exception: " << e.what()); or #define MYLOG2(LEVEL,CHANNEL) logger << setLevel(LEVEL) << setChannel(CHANNEL) MYLOG2(WARNING,"Debug") << "Caught Exception: " << e.what() << endl; Of course a commonly used subset of such macros could be provided. Michael