
Darren Cook wrote:
I'm finding an increasing need for an in-file memory log: specifically when my program asserts I want to see where it has been.
There are two problems with normal logging, i.e. appending to a disk file: * The files get very, very big (I've filled my home partition before) * All that writing to disk slows the application down noticeably.
I checked log4cpp and John Torjo's logging library and neither seem to
not yet, but in the near future I want to add cyclic logs (or rotating logs, if you wish). Note: You can use ts_appender() (formely known as ts_write()), and thus the writing will be on a dedicated thread (I've used this in a real-life app. - it's *very* fast). Just for fun, something like: // assume you've BOOST_DEFINE_LOG(gui,"app.gui") somewhere add_appender("app.gui", ts_appender(write_to_file("out.txt")) ); // written to file in its own dedicated thread - very fast BOOST_LOG(gui) << "whatever" << " you " << "want"; But for asserts, this is not useful :(
offer this, but it seems it could fit as one of the logging targets. I had in mind an object that is a wrapper for e.g. a 1Mb char buffer with the same interface as std::ostream, so I can just write: log_buffer<<"In func1, x="<<x<<", obj="<<obj<<"\n";
And then when my program asserts I can pass log_buffer as a parameter to be output (requires it to have operator<< defined): SMART_ASSERT(y!=1)(y)(log_buffer);
As a side-note, I'm planning to update the SMART_ASSERT lib in about 3 weeks ;) At that time, I want to make it interoperate with Boost.Log . Thus, you should have your failed asserts in no time ;) However, the fact you want the circular log buffer makes me think that you have quite a few failed assertions ;) Anyway, I'll try to improve SMART_ASSERT in the near future. (now that I think about it, maybe it should use Boost.Log for its logging completely...) Best, John -- John Torjo, Contributing editor, C/C++ Users Journal -- "Win32 GUI Generics" -- generics & GUI do mix, after all -- http://www.torjo.com/win32gui/ -- v1.5 - tooltips at your fingertips (work for menus too!) + bitmap buttons (work for MessageBox too!) + tab dialogs, hyper links, lite html