|
Boost : |
From: John Torjo (john.lists_at_[hidden])
Date: 2005-08-01 10:02:53
Hi all,
Just updated the Logging library. Find it here:
http://torjo.com/code/logging.zip
Also, I've updated the docs. Feedback is welcome.
Highlights:
**** Multiple levels.
**** Easier manipulation of logs
**** Modifiers/Appenders can now be deleted.
**** Shortcut for BOOST_IS_LOG_ENABLED
**** Exception guards
**** Shared Memory Appender
**** Multiple levels.
You can specify levels, very much like log4j.
To assign a level to a message, use BOOST_LOGL, like this:
BOOST_LOGL(app,dbg) << "some debug message";
BOOST_LOGL(app,err) << "some error";
BOOST_LOGL(gui,warn) << "some GUIsh warning";
Note the BOOST_LOG still works:
BOOST_LOG(app) << "some message";
// equivalent to:
// BOOST_LOGL(app,default_) << "some message"
**** Easier manipulation of logs
Every time you need to manipulate some logs
(add/delete appenders/modifiers, set the log's level),
you use manipulate_logs("logs_spec")
Example:
manipulate_logs("*")
// all logs prefix the message by time
.add_modifier(prepend_time("$hh:$mm:$ss "), DEFAULT_INDEX + 1 )
// all log' messages are prefixed by the log name
.add_modifier(&prepend_prefix)
// all messages are written to cout
.add_appender(&write_to_cout);
// write all dbg messages and above to app.* logs
manipulate_logs("app.*").enable(boost::logging::level::dbg);
**** Modifiers/Appenders can now be deleted.
In order to delete a modifier/appender, just give it a name:
// prepend time, and name this modifier as "time"
manipulate_logs("*")
.add_modifier(prepend_time("$hh:$mm:$ss "), "time" );
// at a later time
BOOST_LOG(app) << "this is prefixed by time";
manipulate_logs("*")
.del_modifier("time");
BOOST_LOG(app) << "this is NOT prefixed by time";
***** Shortcut for BOOST_IS_LOG_ENABLED
Instead of saying:
// test if message should be written to this log
if ( BOOST_IS_LOG_ENABLED(app,some_level)) ...;
You can say:
if ( app()(some_level)) ...;
**** Exception guards
When logging, if any modifier/appender throws, the exception is not
allowed to propagate.
**** Shared Memory Appender
An appender that allows writing to a shared memory zone, internally
using shmem library.
Still to do:
**** compile-time logs: write docs about it
**** appenders to Event log
**** alternate logging manager
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.6.3 (Resource Splitter) -- http://www.torjo.com/cb/ - Click, Build, Run!
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk