Boost logo

Boost :

From: Greg Landrum (greg.landrum_at_[hidden])
Date: 2005-06-29 17:18:04


I'm just getting started with John Torjo's logging library. So far the
library looks really useful, but I'm having problems understanding the
timing/sequencing of output by the logging objects.

I'm trying to get the logs to dump their output to std:cerr immediately:

// -----------------------------
#include <iostream>
#include <boost/log/log.hpp>
#include <boost/log/functions.hpp>
namespace logging = boost::logging;

BOOST_DECLARE_LOG(cerrLog);
BOOST_DEFINE_LOG(cerrLog,"cerrLog");
void write_to_cerr(const std::string &, const std::string &msg) {
std::cerr << msg; std::cerr.flush();}

int main(){
 logging::add_modifier("cerrLog",logging::prepend_time("[$hh:$mm:$ss] "),
                              logging::DEFAULT_INDEX-10);
 logging::add_appender("cerrLog",write_to_cerr,logging::DEFAULT_INDEX+1);

 std::cerr << "1" << std::endl;
 BOOST_LOG(cerrLog) << "2" << std::endl;
 std::cerr << "3" << std::endl;
 BOOST_LOG(cerrLog) << "4" << std::endl;
}
// -----------------------------

However, the output from running this is always something like:
1
3
[14:56:35] 2
[14:56:35] 4

So the logger output is "late". Is there some flag I can set (or
appender I can use) that will force output to go to the target streams
immediately or is this outside the design of the logging library?

In the event that it matters: I'm using version 1.33 of the logging
library and I've tested this on both Windows (vs .net 2003) and Linux
(g++ v3.2).

Thanks,
-greg


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk