$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Daniel Frey (d.frey_at_[hidden])
Date: 2005-04-29 13:03:07
John Torjo wrote:
> I've just updated the Boost Log Library:
> http://torjo.com/code/logging-v132.zip
It's good to see progress on logging and what I've seen so far looks
promising. However...
> BOOST_LOG(app) << "testing " << i << '-' << j << '-' << k << std::endl;
> BOOST_LOG(dbg) << "this is a debug message, i=" << i << std::endl;
> BOOST_LOG(info) << "I just wanted to tell you something....";
...while I like the feeling of the stream approach from a user's
perspective, there is one (IMHO important) feature that can not be
implemented with it: Exception guards.
To illustrate my point, consider a "pure MACRO approach" like this:
std::string f()
{
throw 42;
}
BOOST_LOG( app, "Huhu!" + f() );
where BOOST_LOG is:
#define BOOST_LOG( logger, message ) \
do { if( logger.is_enabled() ) { \
try { logger.print( message ); } \
catch( const std::exception& e ) { \
logger.print( "Can't log \"" #message "\", e.what(): \"" + \
std::string( e.what() ) + "\"" ); \
} \
catch( ... ) { \
logger.print( "Can't log \"" #message "\", unknown exception" ); \
} \
} } while( false )
This feature helped us several times in the company when a log-message,
calling some complicated functions, failed in a production system. As
long as the above technique is applied, the log-file contains a good
hint for us what's wrong and the product is still running without the
customer noticing.
Regards, Daniel