Boost logo

Boost :

From: Daniel Frey (d.frey_at_[hidden])
Date: 2004-03-18 18:03:02

Rob Stewart wrote:
> From: "Neal D. Becker" <ndbecker2_at_[hidden]>
>>John Torjo wrote:
>>>Neal D. Becker wrote:
>>>>I notice boost doesn't have a logging library. I have seen several
>>>>around. Are there any recommendations?
>>>How about std::ostream ;) ?
>>>Also, disabling writing to a stream is fairly easy, by setting the
>>>failbit of a stream object:
>>>out.setstate( std::ios::failbit); // nothing gets written to this log
>>>any more
>>Interesting idea. I would like the overhead of disabled loggers to be
>>relatively small. Would you think this technique might be useful in that
>>case? (Of course, relatively small is a relative term).
> Every insertion and every mf you call on the stream must occur
> and must check the failbit flag. It would, therefore, have
> noticeable overhead. Is it a problem? Maybe. You could time an
> app with the logging compiled away (via preprocessor) and with
> the failbit set.

I think it's the wrong approach. In our company we have implemented
logging through macros which has one very important property: When I write

LOG_DEBUG( whatever() );

into my source, then whatever() is only evaluated when the debug-logger
is active. The macro basically expands to something like this:

if( Base::hasLogger( LogLevel::DEBUG ) )
   Base::log( whatever(), LogLevel::DEBUG );

I think this cannot be done without macros as normal function calls
(including operator<< for streams) need to evaluate their arguments
before they are called. As the difference in the application execution
speed can vary by a factor of 1000, this is a very valuable optimization
for us. My 2¢.

Regards, Daniel

Boost list run by bdawes at, gregod at, cpdaniel at, john at