
Rob Stewart wrote:
From: "Neal D. Becker" <ndbecker2@verizon.net>
John Torjo wrote:
Neal D. Becker wrote:
I notice boost doesn't have a logging library. I have seen several floating 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