
Andrey Semashev wrote:
On 06/12/2010 07:32 AM, Michael Caisse wrote:
What happens is that the log file shows up after the program exits. Since I was hoping to tail the file for some debug ... that isn't very convenient.
Ideas of what I have done wrong?
The file is only created when the first log record is written to it. Could it be the case that you don't log until the end of the application run time or filters reject records? Also, is it possible that the execution time is very short to tell for sure when the record is written to the file?
The auto-flush feature is quite straightforward, I can't see from the code how it could do wrong.
Hi Andrey - The following is a reduced example that still fails. The file is not created until the program is exiting. Thank you for the help. ------------------------- #include <fstream> #include <iostream> #include <boost/shared_ptr.hpp> #include <boost/make_shared.hpp> #include <boost/filesystem/convenience.hpp> #include <boost/date_time/posix_time/posix_time.hpp> #include <boost/log/sources/severity_logger.hpp> #include <boost/log/sources/record_ostream.hpp> #include <boost/log/sources/global_logger_storage.hpp> #include <boost/log/keywords/severity.hpp> #include <boost/log/formatters/stream.hpp> #include <boost/log/formatters/message.hpp> #include <boost/log/sinks/text_file_backend.hpp> #include <boost/log/sinks/sync_frontend.hpp> #include <boost/log/utility/init/common_attributes.hpp> namespace omd{ namespace log{ enum severity_level{ trace, info, }; typedef boost::log::sources::severity_logger_mt< severity_level > omd_logger; namespace detail{ void init() { using namespace boost::log; boost::log::add_common_attributes<char>(); typedef sinks::synchronous_sink<sinks::text_file_backend> sink_type; boost::shared_ptr<sink_type> sink = boost::make_shared<sink_type>( keywords::file_name = "%Y%m%d_%H%M%S_%5N.log", keywords::open_mode = (std::ios::out | std::ios::app), keywords::auto_flush = true, keywords::rotation_size = 16*1024 ); sink->locked_backend()->set_file_collector( sinks::file::make_collector( keywords::target = "logs", keywords::max_size = 16*1024*1024, keywords::min_free_space = 100*1024*1024 )); sink->locked_backend()->scan_for_files(); typedef aux::add_common_attributes_constants< char > traits_t; sink->locked_backend()->set_formatter( formatters::stream << formatters::message<char>() ); core::get()->add_sink(sink); } } BOOST_LOG_DECLARE_GLOBAL_LOGGER_INIT(logger, omd_logger) { omd::log::detail::init(); return omd_logger(::boost::log::keywords::severity = info); } #define OMD_LOG(level)\ BOOST_LOG_STREAM_WITH_PARAMS(::omd::log::get_logger(),\ (::boost::log::keywords::severity = ::omd::log::level)) }} int main() { OMD_LOG(info) << "starting..."; char tmp; std::cin >> tmp; OMD_LOG(info) << "leaving."; return 0; } ------------------------------------------ -- ---------------------------------- Michael Caisse Object Modeling Designs www.objectmodelingdesigns.com