$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: john.groups_at_[hidden]
Date: 2007-10-29 21:42:32
Author: jtorjo
Date: 2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
New Revision: 40594
URL: http://svn.boost.org/trac/boost/changeset/40594
Log:
[logging]
v0.9.2, 30 oct 2007
- Breaking chage: 
  - @c process_msg class has been removed. Now @c logger takes its place
  - Instead of logger<use_format_write<>>, use logger_format_write<>
Added:
   sandbox/logging/boost/logging/changelog.hpp   (contents, props changed)
   sandbox/logging/boost/logging/detail/logger.hpp   (contents, props changed)
   sandbox/logging/boost/logging/detail/sink.hpp   (contents, props changed)
Removed:
   sandbox/logging/boost/logging/process_msg.hpp
   sandbox/logging/boost/logging/sink.hpp
   sandbox/logging/lib/logging/src/changelog.txt
Properties modified: 
   sandbox/logging/lib/logging/samples/basic_usage/   (props changed)
Text files modified: 
   sandbox/logging/boost/logging/detail/format_msg_type.hpp                 |    11 +---                                    
   sandbox/logging/boost/logging/detail/log_keeper.hpp                      |    10 ++-                                     
   sandbox/logging/boost/logging/detail/raw_doc/fixme.hpp                   |     2                                         
   sandbox/logging/boost/logging/detail/raw_doc/main.hpp                    |     7 ++                                      
   sandbox/logging/boost/logging/detail/raw_doc/table_of_contents.hpp       |     1                                         
   sandbox/logging/boost/logging/detail/use_format_write.hpp                |    22 +++----                                 
   sandbox/logging/boost/logging/detail/util.hpp                            |     1                                         
   sandbox/logging/boost/logging/filter.hpp                                 |   104 ----------------------------------------
   sandbox/logging/boost/logging/format.hpp                                 |    10 ---                                     
   sandbox/logging/boost/logging/format_fwd.hpp                             |     5 +                                       
   sandbox/logging/boost/logging/logging.hpp                                |     3                                         
   sandbox/logging/boost/logging/macros.hpp                                 |    47 ++++++++++--------                      
   sandbox/logging/lib/logging/samples/basic_usage/basic_usage.vcproj       |     2                                         
   sandbox/logging/lib/logging/samples/basic_usage/log.cpp                  |     2                                         
   sandbox/logging/lib/logging/samples/basic_usage/log.h                    |     9 +-                                      
   sandbox/logging/lib/logging/samples/scenarios/custom_fmt_dest.cpp        |     2                                         
   sandbox/logging/lib/logging/samples/scenarios/fastest_no_ostr_like.cpp   |    17 +++++-                                  
   sandbox/logging/lib/logging/samples/scenarios/fastest_use_ostr_like.cpp  |     8 +-                                      
   sandbox/logging/lib/logging/samples/scenarios/mul_levels_mul_logers.cpp  |     4                                         
   sandbox/logging/lib/logging/samples/scenarios/mul_levels_one_logger.cpp  |     5 -                                       
   sandbox/logging/lib/logging/samples/scenarios/mul_loggers_one_filter.cpp |     2                                         
   sandbox/logging/lib/logging/samples/scenarios/no_levels_with_route.cpp   |     2                                         
   sandbox/logging/lib/logging/samples/scenarios/one_loger_one_filter.cpp   |     2                                         
   sandbox/logging/lib/logging/samples/vc8/loggingvc8/loggingvc8.vcproj     |    36 ++++++++-----                           
   sandbox/logging/lib/logging/tests/testfast.cpp                           |     2                                         
   25 files changed, 113 insertions(+), 203 deletions(-)
Added: sandbox/logging/boost/logging/changelog.hpp
==============================================================================
--- (empty file)
+++ sandbox/logging/boost/logging/changelog.hpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -0,0 +1,77 @@
+/** 
+@page page_changelog Changelog
+
+v0.9.2, 30 oct 2007
+- Breaking chage: 
+  - @c process_msg class has been removed. Now @c logger takes its place
+  - Instead of logger<use_format_write<>>, use logger_format_write<>
+
+v0.9.1, 30 oct 2007
+- implemented BOOST_DEFINE_LOG/BOOST_DECLARE_LOG for when not compiling fast
+- BEFORE a breaking change that will happen :
+  - logger as is now will dissapear
+  - the new logger class will be the old process_msg class
+  
+
+v0.9.0, 28 oct 2007
+- use_format_write has 4 params now, I've added 2 new params: thread_safety and gather 
+  - if you want to leave something unchanged, use "default_" as argument
+- added more complex example: Line Counter application
+- Breaking change: 
+  - filters are declared with BOOST_DECLARE_LOG_FILTER, and defined with BOOST_DEFINE_LOG_FILTER
+  - filters are now used with operator->, instead of "."
+  - Example: 
+		BOOST_DEFINE_LOG_LEVEL(g_log_level, level::holder ) 
+		... 
+		g_log_level->set_enabled(level::error);
+  - rationale: filters, same as levels, could be used before main
+
+
+v0.8.3, 22 oct 2007
+- now have 8 scenarios
+- updated documentation
+
+
+v0.8.2, 22 oct 2007
+- added one more common scenario (with_route)
+
+
+v0.8.1, 22 oct 2007
+- added one more common scenario
+- finally figured out how I can add examples using doxygen :)
+
+
+v0.8, 20 oct 2007
+- added use_format_write class
+- removed the filter from the logger class (need to update documentation)
+- added Common scenario
+
+
+v0.7.3, 19 oct 2007
+- added the manipulator::class_ concept
+- added some documentation
+
+
+v0.7.2, 18 oct 2007
+- format_write cares if formatter/destination is generic or not
+- solved bug when deleting manipulators (same_type needed to have a virtual destructor)
+
+v0.4, 9 oct 2007
+- ts_write and on_dedicated_thread work
+
+v0.5, 11 oct 2007
+- compiles
+- added documentation
+
+v0.5.2, 11 oct 2007
+- changed license
+- added to boost
+
+v0.6, 13 oct 2007
+- added formatters from v1. of the library
+- added convert_format cool function :P
+
+v0.7, 15 oct 2007
+- compiles with gcc 3.4.2
+
+*/
Modified: sandbox/logging/boost/logging/detail/format_msg_type.hpp
==============================================================================
--- sandbox/logging/boost/logging/detail/format_msg_type.hpp	(original)
+++ sandbox/logging/boost/logging/detail/format_msg_type.hpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -28,6 +28,8 @@
 
 namespace boost { namespace logging {
 
+template<class gather_msg , class write_msg > struct logger ;
+
 namespace formatter {
     /** 
     @brief what is the default type of your string, in formatter_base ? See BOOST_LOG_FORMAT_MSG
@@ -54,20 +56,13 @@
     - use a default gather
 */
 namespace detail {
-    template<class gather_msg> struct call_write;
-
-    template<class gather_type> struct fast_compile_with_gather {
-        typedef gather_type gather_msg;
-        typedef typename process_msg_with_ptr_base< gather_msg >  process_type;
-        typedef typename logger< process_type* > log_type;
-    };
 
     template<class T = override> struct fast_compile_with_default_gather {
         typedef typename boost::logging::formatter::msg_type<T>::type msg_type_ref;
         typedef typename boost::remove_reference<msg_type_ref>::type msg_type;
 
         typedef typename find_gather< msg_type >::type gather_msg;
-        typedef typename fast_compile_with_gather< gather_msg >::log_type log_type;
+        typedef typename logger< gather_msg, default_ > log_type;
     };
 
 }
Modified: sandbox/logging/boost/logging/detail/log_keeper.hpp
==============================================================================
--- sandbox/logging/boost/logging/detail/log_keeper.hpp	(original)
+++ sandbox/logging/boost/logging/detail/log_keeper.hpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -39,11 +39,13 @@
 
         g_l->writer().add_formatter( formatter::idx() );
     */
-    template<class type, type& (*func)() > struct log_keeper {
-        typedef typename type::process_msg_type process_msg_type ;
+    template<class type, type& (*func)(), class base_type = type, base_type& (*base_func)() = func > struct log_keeper {
 
-        const process_msg_type* operator->() const  { return func().operator->(); }
-        process_msg_type* operator->()              { return func().operator->(); }
+        const type* operator->() const  { return &func(); }
+        type* operator->()              { return &func(); }
+
+        const base_type* base() const  { return &base_func(); }
+        base_type* base()              { return &base_func(); }
     };
 
     struct fake_using_log {
Added: sandbox/logging/boost/logging/detail/logger.hpp
==============================================================================
--- (empty file)
+++ sandbox/logging/boost/logging/detail/logger.hpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -0,0 +1,240 @@
+// logger.hpp
+
+// Boost Logging library
+//
+// Author: John Torjo, www.torjo.com
+//
+// Copyright (C) 2007 John Torjo (see www.torjo.com for email)
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org for updates, documentation, and revision history.
+// See http://www.torjo.com/log2/ for more details
+
+
+#ifndef JT28092007_logger_HPP_DEFINED
+#define JT28092007_logger_HPP_DEFINED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/logging/detail/fwd.hpp>
+#include <boost/logging/detail/forward_constructor.hpp>
+#include <boost/logging/detail/find_gather.hpp>
+
+namespace boost { namespace logging {
+
+
+    
+    template<class holder, class gather_type> struct gather_holder {
+        gather_holder(const holder & p_this) : m_this(p_this), m_use(true) {}
+        
+        gather_holder(const gather_holder & other) : m_this(other.m_this), m_use(true) {
+            other.m_use = false;
+        }
+
+        ~gather_holder() { 
+            // FIXME handle exiting from exceptions!!!
+            if ( m_use)
+                m_this.on_do_write(m_obj); 
+        }
+        gather_type & gather() { return m_obj; }
+    private:
+        const holder & m_this;
+        mutable gather_type m_obj;
+        mutable bool m_use;
+    };
+
+    namespace detail {
+        template<class type> type& as_non_const(const type & t) { return const_cast<type&>(t); }
+    }
+
+
+
+    /** 
+    @brief The logger class. Every log from your application is an instance of this (see @ref workflow_processing "workflow")
+
+    As described in @ref workflow_processing "workflow", processing the message is composed of 2 things:
+    - @ref workflow_2a "Gathering the message" 
+    - @ref workflow_2b "Processing the message"
+
+    The process_msg class has 2 template parameters:
+
+
+    @param gather_msg A new gather instance is created each time a message is written. 
+    The @c gather_msg class needs to be default-constructible.
+    The @c gather_msg must have a function called @c .msg() which contains all information about the written message.
+    It will be passed to the write_msg class.
+    You can implement your own @c gather_msg class, or use any from the gather namespace.
+
+
+    @param write_msg This is the object that does the @ref workflow_2b "second step" - the writing of the message.
+    It can be a simple functor.
+    Or, it can be a more complex object that contains logic of how the message is to be further formatted,
+    and written to multiple destinations. 
+    You can implement your own @c write_msg class, or it can be any of the classes defined in writer namespace.
+    Check out writer::format_write - which allows you to use
+    several formatters to further format the message, and then write it to destinations.
+
+
+
+    \n\n    
+    The logger forwards all message processing to the @c %process_msg class. The @c %process_msg class forwards
+    the gathering of the message to the @c gather_msg class. Once all message is gathered, it's passed on to the writer.
+    This is usually done through a @ref macros "macro".
+
+    @code
+    logger< process_msg<...> ... > g_log;
+
+    #define L_ if ( !g_log) ; else g_log->read_msg().gather().some_function_in_the_gather_class
+
+    // usage
+    L_ << "cool " << "message";
+
+    @endcode
+
+
+
+    \n\n        
+    To understand more on the workflow that involves process_msg:
+    - check out the gather namespace
+    - check out the writer namespace
+    
+    */
+    template<class gather_msg = default_, class write_msg = default_ > struct logger {
+        typedef typename use_default<gather_msg, gather::ostream_like::return_str< std::basic_ostringstream<char_type> > > ::type gather_type;
+        typedef write_msg write_type;
+
+        typedef logger<gather_msg, write_msg> self;
+
+        logger() {}
+        BOOST_LOGGING_FORWARD_CONSTRUCTOR(logger,m_writer)
+
+        // FIXME watch for copy-construction!
+        /** 
+            reads all data about a log message (gathers all the data about it)
+            FIXME
+        */
+        gather_holder<self, gather_type> read_msg() const { return gather_holder<self, gather_type>(*this) ; }
+
+        write_msg & writer()                    { return m_writer; }
+        const write_msg & writer() const        { return m_writer; }
+
+        // called after all data has been gathered
+        void on_do_write(gather_type & gather) const {
+            m_writer( detail::as_non_const(gather.msg()) );
+        }
+
+    private:
+        write_msg m_writer;
+    };
+
+    // specialize for write_msg* pointer!
+    template<class gather_msg, class write_msg> struct logger<gather_msg, write_msg* > {
+        typedef gather_msg gather_type;
+        typedef write_msg write_type;
+
+        typedef logger<gather_msg, write_msg*> self;
+
+        logger(write_msg * writer = 0) : m_writer(writer) {}
+
+        void set_writer(write_msg* writer) {
+            m_writer = writer;
+        }
+
+        // FIXME watch for copy-construction!
+        /** 
+            reads all data about a log message (gathers all the data about it)
+            FIXME
+        */
+        gather_holder<self, gather_msg> read_msg() const { return gather_holder<self, gather_msg>(*this) ; }
+
+        write_msg & writer()                    { return *m_writer; }
+        const write_msg & writer() const        { return *m_writer; }
+
+        // called after all data has been gathered
+        void on_do_write(gather_msg & gather) const {
+            (*m_writer)( detail::as_non_const(gather.msg()) );
+        }
+
+    private:
+        write_msg *m_writer;
+    };
+
+
+    // specialize when write_msg is not set - in this case, you need to derive from this
+    template<class gather_msg> struct logger<gather_msg, default_ > {
+        typedef gather_msg gather_type;
+        typedef void_ write_type;
+
+        typedef logger<gather_msg, default_> self;
+        typedef typename gather_msg::param param;
+
+        logger() {}
+
+        // FIXME watch for copy-construction!
+        /** 
+            reads all data about a log message (gathers all the data about it)
+            FIXME
+        */
+        gather_holder<self, gather_msg> read_msg() const { return gather_holder<self, gather_msg>(*this) ; }
+
+        write_type & writer()                    { return m_writer; }
+        const write_type & writer() const        { return m_writer; }
+
+        // called after all data has been gathered
+        void on_do_write(gather_msg & gather) const {
+            do_write( detail::as_non_const(gather.msg()) );
+        }
+
+        virtual void do_write(param) const = 0;
+    private:
+        // we don't know the writer
+        void_ m_writer;
+    };
+
+    /** 
+    
+    @param write_msg the write message class. If a pointer, forwards to a pointer. If not a pointer, it holds it by value.
+    */
+    template<class gather_msg, class write_msg> struct implement_default_logger : logger<gather_msg, default_> {
+        typedef typename gather_msg::param param;
+
+        implement_default_logger() {}
+        BOOST_LOGGING_FORWARD_CONSTRUCTOR(implement_default_logger,m_writer)
+
+        virtual void do_write(param a) const {
+            m_writer(a);
+        }
+
+    private:
+        write_msg m_writer;
+    };
+
+    // specialization for pointers
+    template<class gather_msg, class write_msg> struct implement_default_logger<gather_msg,write_msg*> : logger<gather_msg, default_> {
+        typedef typename gather_msg::param param;
+
+        implement_default_logger(write_msg * writer = 0) : m_writer(writer) {}
+
+        void set_writer(write_msg* writer) {
+            m_writer = writer;
+        }
+
+        virtual void do_write(param a) const {
+            (*m_writer)(a);
+        }
+
+    private:
+        write_msg * m_writer;
+    };
+
+
+
+}}
+
+#endif
+
Modified: sandbox/logging/boost/logging/detail/raw_doc/fixme.hpp
==============================================================================
--- sandbox/logging/boost/logging/detail/raw_doc/fixme.hpp	(original)
+++ sandbox/logging/boost/logging/detail/raw_doc/fixme.hpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -4,7 +4,7 @@
 
 FIXME change the workflow & logger's definition - it doesn't need a filter
 all gather classes - they need to typedef the param they take, so that I can create a virtual function.
-
+no more process_msg class -> remove from docs!
 
 
 
Modified: sandbox/logging/boost/logging/detail/raw_doc/main.hpp
==============================================================================
--- sandbox/logging/boost/logging/detail/raw_doc/main.hpp	(original)
+++ sandbox/logging/boost/logging/detail/raw_doc/main.hpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -5,6 +5,7 @@
 
 - @ref main_motivation
 - @ref main_common_usage
+- @ref main_changelog
 
 @section main_motivation Motivation
 
@@ -50,6 +51,12 @@
 
 To see more examples, check out @ref common_scenarios.
 
+
+\n\n\n
+@section main_changelog Changelog
+
+@copydoc page_changelog 
+
 */
 
 }}
Modified: sandbox/logging/boost/logging/detail/raw_doc/table_of_contents.hpp
==============================================================================
--- sandbox/logging/boost/logging/detail/raw_doc/table_of_contents.hpp	(original)
+++ sandbox/logging/boost/logging/detail/raw_doc/table_of_contents.hpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -6,6 +6,7 @@
 
 - @ref main_intro
     - @ref main_motivation
+    - @ref main_changelog
 - @ref common_scenarios
     - @ref common_scenarios_1
     - @ref common_scenarios_2
Added: sandbox/logging/boost/logging/detail/sink.hpp
==============================================================================
--- (empty file)
+++ sandbox/logging/boost/logging/detail/sink.hpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -0,0 +1,85 @@
+// sink.hpp
+
+// Boost Logging library
+//
+// Author: John Torjo, www.torjo.com
+//
+// Copyright (C) 2007 John Torjo (see www.torjo.com for email)
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org for updates, documentation, and revision history.
+// See http://www.torjo.com/log2/ for more details
+
+/*  FIXME this whole file will most likely dissapear
+
+*/
+
+#ifndef JT28092007_sink_HPP_DEFINED
+#define JT28092007_sink_HPP_DEFINED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/logging/detail/fwd.hpp>
+
+namespace boost { namespace logging {
+
+
+
+    /*
+        The sink
+
+        Workflow - we have a sink object, which asks the logger if it's enabled     
+        If the logger is enabled, it also returns the message processor.
+
+        Thus, you can write code like this:
+        if ( sink<some_type> s = find_logger(some_logger) )
+            s.process_msg( ... );
+
+        Note that this is useful only if you have a find_logger function which doesn't always return the same logger
+        (thus, you need to cached the result).
+
+        Otherwise, the logger already has helper funcs, which allow you to do this:
+
+        if ( logger) logger.process_msg()....
+    */
+    template<class process_msg_type> struct sink {
+        template<class logger> sink(const logger & f) {
+            p = f.is_enabled() ? &f.process_msg() : 0;
+        }
+        operator bool() const           { return p != 0; }
+        const process_msg_type & process_msg() { return *p; }
+        /** 
+            Syntactic sugar. Allow writing  
+            if ( sink s = dbg_filter) s->some_func(x);
+        */
+        const process_msg_type* operator->() { return p; }
+    protected:
+        const process_msg_type * p;
+    };
+
+    /** 
+        This negates the sink, allowing you to create LOG macros. That is, it allows for this construct:
+
+        if ( negate_sink<some_type> s = find_logger(some_filter) )
+            ;
+        else
+            s.process_msg() ...;
+
+        @sa sink
+    */
+    template<class process_msg_type> struct negate_sink : sink<process_msg_type> {
+        typedef sink<process_msg_type> base_type;
+        template<class logger> negate_sink(const logger & f) : base_type(f) {}
+        operator bool() const { return base_type::p == 0; }
+    };
+
+}}
+
+
+#endif
+
Modified: sandbox/logging/boost/logging/detail/use_format_write.hpp
==============================================================================
--- sandbox/logging/boost/logging/detail/use_format_write.hpp	(original)
+++ sandbox/logging/boost/logging/detail/use_format_write.hpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -79,7 +79,7 @@
             class thread_safety ,
             class gather 
     >
-        struct use_format_write {
+struct use_format_write {
 
     typedef typename use_default<format_base_type, boost::logging::formatter::base<> > ::type format_base;
     typedef typename use_default<destination_base_type, boost::logging::destination::base<> > ::type destination_base;
@@ -91,9 +91,10 @@
     typedef typename detail::find_format_write_params<format_param, format_base, destination_base>::router_type router_type;
 };
 
-template<class format_base, class destination_base, class thread_safety, class gather> struct logger< use_format_write<format_base, destination_base, thread_safety, gather> > 
-    : logger_base< 
-        process_msg< 
+
+template<class format_base, class destination_base, class thread_safety, class gather> 
+struct logger_format_write
+    : logger< 
             typename use_format_write<format_base, destination_base, thread_safety, gather>::gather_type,
             writer::format_write<
                 typename use_format_write<format_base, destination_base, thread_safety, gather>::format_base,
@@ -101,11 +102,9 @@
                 typename use_format_write<format_base, destination_base, thread_safety, gather>::apply_format_and_write,
                 typename use_format_write<format_base, destination_base, thread_safety, gather>::router_type
             > 
-        > 
-      >
+    >
 {
-    typedef logger_base< 
-        process_msg< 
+    typedef logger< 
             typename use_format_write<format_base, destination_base, thread_safety, gather>::gather_type,
             writer::format_write<
                 typename use_format_write<format_base, destination_base, thread_safety, gather>::format_base,
@@ -113,12 +112,11 @@
                 typename use_format_write<format_base, destination_base, thread_safety, gather>::apply_format_and_write,
                 typename use_format_write<format_base, destination_base, thread_safety, gather>::router_type
             > 
-        > 
-      >
+    >
      logger_base_type;
 
-    logger() {}
-    BOOST_LOGGING_FORWARD_CONSTRUCTOR(logger, logger_base_type)
+    logger_format_write() {}
+    BOOST_LOGGING_FORWARD_CONSTRUCTOR(logger_format_write, logger_base_type)
 };
 
 }}
Modified: sandbox/logging/boost/logging/detail/util.hpp
==============================================================================
--- sandbox/logging/boost/logging/detail/util.hpp	(original)
+++ sandbox/logging/boost/logging/detail/util.hpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -36,6 +36,7 @@
     template<class param, class default_type> struct use_default                    { typedef param type; };
     template<class default_type> struct use_default<default_, default_type>         { typedef default_type type; };
 
+    struct void_ {};
 
     struct ansi_unicode_char_holder {
         const char * str;
Modified: sandbox/logging/boost/logging/filter.hpp
==============================================================================
--- sandbox/logging/boost/logging/filter.hpp	(original)
+++ sandbox/logging/boost/logging/filter.hpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -181,110 +181,6 @@
 } // namespace filter
 
 
-    /** 
-        @brief Base class for all loggers
-    */
-    template<class process_msg_type_ > struct logger_base {
-        typedef process_msg_type_ process_msg_type;
-
-        logger_base() {}
-
-        BOOST_LOGGING_FORWARD_CONSTRUCTOR(logger_base, m_processor)
-
-        /** 
-            The only way to get to the message processor. Allow writing  <tt>logger->some_method(x);</tt>
-        */
-        const process_msg_type* operator->() const  { return &m_processor; }
-        process_msg_type* operator->()              { return &m_processor; }
-
-    private:
-        process_msg_type m_processor;
-    };
-
-
-    // specialized for pointers
-    template<class process_msg_type_ > struct logger_base<process_msg_type_* > {
-        typedef process_msg_type_ process_msg_type;
-
-        logger_base(process_msg_type *p) : m_processor(p) {}
-
-        const process_msg_type* operator->() const  { return m_processor; }
-        process_msg_type* operator->()              { return m_processor; }
-
-    private:
-        process_msg_type *m_processor;
-    };
-
-
-    /** 
-    @brief The logger class. Every log from your application is an instance of this.
-
-    The logger has a message processor, which will process the message if <i>you decide</i> the log is enabled
-    (@ref workflow "see workflow")
-
-    The logger derives from the filter, so you can manipulate it as a %filter (enable/disable it, if the %filter allows it)
-    In addition to that, it implements the bool() and ! (not) operator, which just return whether the log is enabled or not:
-    
-    @code
-    logger<write_to_cout> g_log;
-
-    // usage
-    if ( g_log) do_something(g_log);
-    if ( !g_log) ; else do_something(g_log);
-    @endcode
-
-    The logger owns an instance of @c process_msg_type, and allows access to it through @c process_msg function, or through @c operator->
-
-    @code
-    logger<write_to_cout> g_log;
-    g_log.process_msg().some_method(...);
-    g_log->some_method(...)
-    @endcode
-
-    By default, when constructed, the logger forwards all arguments to the process_msg instance. However, you can initialize both
-    the filter and the process_msg at the same time, like this:
-
-    @code
-    logger<...> l(init_both, param_to_initialize_process, param_to_initialize_filter);
-    @endcode
-
-    The logger always forwards all message processing to the @c process_msg_type class (see process_msg). Basically, usage through @ref macros "macros" is:
-
-    @code
-    logger<...> g_log;
-
-    #define L_ if ( !g_log) ; else g_log.process_msg().do_processing...;
-    // OR
-    #define L_ if ( !g_log) ; else g_log->do_processing...;
-
-    // usage
-    L_ << "cool " << "message";
-    @endcode
-
-
-
-
-
-    @note
-    You might think that the logical place for the filter would be in the logger (that is, the logger should own the filter). Well, this is how
-    the interface was at the beginning. However, in practice, it often happens that the same filter be shared be different loggers.
-    So it's best to just have the filter and logger concepts completely separated.
-
-    FIXME explain how filters work!
-
-
-    \n\n
-
-    @param process_msg_type The message processor. It can be any class that will process the message.
-                            How the class does the actual processing is up to you - also, based on that you'll @ref macros "define your macro(s)". 
-                            For non-trivial cases, it should be the process_msg class.    
-
-    */
-    template<class process_msg_type_ > struct logger : logger_base<process_msg_type_> {
-        typedef logger_base<process_msg_type_> logger_base_type;
-        logger() {}
-        BOOST_LOGGING_FORWARD_CONSTRUCTOR(logger, logger_base_type)
-    };
 
 
 
Modified: sandbox/logging/boost/logging/format.hpp
==============================================================================
--- sandbox/logging/boost/logging/format.hpp	(original)
+++ sandbox/logging/boost/logging/format.hpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -34,16 +34,6 @@
 #include <boost/logging/detail/manipulator.hpp>
 #include <boost/logging/format_fwd.hpp>
 
-// redefine some of the macros
-#undef JT28092007_macros_HPP_DEFINED
-
-// when including this, we're using the logs
-#ifndef BOOST_LOG_USE_LOGS
-#define BOOST_LOG_USE_LOGS
-#endif
-
-#include <boost/logging/macros.hpp>
-
 namespace boost { namespace logging {
 
 /** 
Modified: sandbox/logging/boost/logging/format_fwd.hpp
==============================================================================
--- sandbox/logging/boost/logging/format_fwd.hpp	(original)
+++ sandbox/logging/boost/logging/format_fwd.hpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -24,6 +24,7 @@
 
 #include <boost/logging/logging.hpp>
 #include <boost/logging/format/optimize.hpp>
+#include <boost/logging/process_msg/ostream_like.hpp>
 
 namespace boost { namespace logging {
 
@@ -48,7 +49,7 @@
 #if defined(BOOST_LOG_DEFINE_LOGS)
 #include <boost/logging/format.hpp>
 
-typedef logger< use_format_write< > > log_type;
+typedef logger_format_write< > log_type;
 #endif
 
 BOOST_DECLARE_LOG(g_l, log_type)
@@ -69,7 +70,7 @@
             class destination_base_type = default_ ,
             class thread_safety = default_ ,
             class gather = default_
-    > struct use_format_write ;
+    > struct logger_format_write;
 
 
 }}
Modified: sandbox/logging/boost/logging/logging.hpp
==============================================================================
--- sandbox/logging/boost/logging/logging.hpp	(original)
+++ sandbox/logging/boost/logging/logging.hpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -23,8 +23,7 @@
 
 #include <boost/logging/detail/fwd.hpp>
 #include <boost/logging/filter.hpp>
-#include <boost/logging/process_msg.hpp>
-#include <boost/logging/sink.hpp>
+#include <boost/logging/detail/logger.hpp>
 #include <boost/logging/macros.hpp>
 #include <boost/logging/level.hpp>
 
Modified: sandbox/logging/boost/logging/macros.hpp
==============================================================================
--- sandbox/logging/boost/logging/macros.hpp	(original)
+++ sandbox/logging/boost/logging/macros.hpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -17,11 +17,9 @@
 #ifndef JT28092007_macros_HPP_DEFINED
 #define JT28092007_macros_HPP_DEFINED
 
-/* 
-    VERY IMPORTANT: 
-    Not using #pragma once
-    We might need to re-include this file, when defining the logs
-*/
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
 
 #include <boost/logging/detail/fwd.hpp>
 #include <time.h>
@@ -84,34 +82,43 @@
 #define BOOST_DECLARE_LOG(name,type) \
     type& name ## _boost_log_impl_(); \
     ::boost::logging::detail::fast_compile_with_default_gather<>::log_type & name ## _boost_log_impl_light_(); \
-    extern boost::logging::detail::log_keeper<type, name ## _boost_log_impl_ > name; 
+    extern boost::logging::detail::log_keeper<type, name ## _boost_log_impl_, ::boost::logging::detail::fast_compile_with_default_gather<>::log_type, name ## _boost_log_impl_light_ > name; 
 
 #define BOOST_DEFINE_LOG(name,type)  type& name ## _boost_log_impl_() \
     { static type i; return i; } \
     namespace { boost::logging::detail::fake_using_log ensure_log_is_created_before_main ## name ( name ## _boost_log_impl_() ); } \
-    boost::logging::detail::log_keeper<type, name ## _boost_log_impl_ > name; \
+    boost::logging::detail::log_keeper<type, name ## _boost_log_impl_, ::boost::logging::detail::fast_compile_with_default_gather<>::log_type, name ## _boost_log_impl_light_ > name; \
     ::boost::logging::detail::fast_compile_with_default_gather<>::log_type & name ## _boost_log_impl_light_()  \
     { typedef ::boost::logging::detail::fast_compile_with_default_gather<>::gather_msg gather_msg; \
-    typedef type::process_msg_type process_msg_type; \
-    typedef process_msg_type::write_type write_msg; \
-    static ::boost::logging::detail::process_msg_with_ptr< gather_msg, write_msg > p( name ## _boost_log_impl_() ); \
-    static ::boost::logging::detail::fast_compile_with_default_gather<>::log_type i ( &p ); \
-    return i; }
+    typedef type::write_type write_msg; \
+    static ::boost::logging::implement_default_logger< gather_msg, write_msg* > p( &(name ## _boost_log_impl_().writer()) ); \
+    return p; }
+
+#define BOOST_DEFINE_LOG_WITH_ARGS(name,type, args)  type& name ## _boost_log_impl_() \
+    { static type i ( args ); return i; } \
+    namespace { boost::logging::detail::fake_using_log ensure_log_is_created_before_main ## name ( name ## _boost_log_impl_() ); } \
+    boost::logging::detail::log_keeper<type, name ## _boost_log_impl_, ::boost::logging::detail::fast_compile_with_default_gather<>::log_type, name ## _boost_log_impl_light_ > name; \
+    ::boost::logging::detail::fast_compile_with_default_gather<>::log_type & name ## _boost_log_impl_light_()  \
+    { typedef ::boost::logging::detail::fast_compile_with_default_gather<>::gather_msg gather_msg; \
+    typedef type::write_type write_msg; \
+    static ::boost::logging::implement_default_logger< gather_msg, write_msg* > p( &(name ## _boost_log_impl_().writer()) ); \
+    return p; }
+
 
 
 #else
 // don't compile fast
-
 #define BOOST_DECLARE_LOG(name,type) type& name ## _boost_log_impl_(); extern boost::logging::detail::log_keeper<type, name ## _boost_log_impl_ > name; 
 #define BOOST_DEFINE_LOG(name,type)  type& name ## _boost_log_impl_() \
     { static type i; return i; } \
     namespace { boost::logging::detail::fake_using_log ensure_log_is_created_before_main ## name ( name ## _boost_log_impl_() ); } \
     boost::logging::detail::log_keeper<type, name ## _boost_log_impl_ > name; 
 
-/** 
-    Advanced
-*/
-#define BOOST_DECLARE_LOG_WITH_GATHER(name,type,gather_type) BOOST_DECLARE_LOG(name,type)
+#define BOOST_DEFINE_LOG_WITH_ARGS(name,type, args)  type& name ## _boost_log_impl_() \
+    { static type i ( args); return i; } \
+    namespace { boost::logging::detail::fake_using_log ensure_log_is_created_before_main ## name ( name ## _boost_log_impl_() ); } \
+    boost::logging::detail::log_keeper<type, name ## _boost_log_impl_ > name; 
+
 
 #endif
 
@@ -155,16 +162,14 @@
 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 // Log Macros
 
-// FIXME always need to specify the function to call
-// when compiling fast, I'll use l ## _boost_log_impl() !!!
 
-#define BOOST_LOG_USE_LOG(l, do_func, is_log_enabled) if ( !(is_log_enabled) ) ; else l -> do_func
+#define BOOST_LOG_USE_LOG(l, do_func, is_log_enabled) if ( !(is_log_enabled) ) ; else l .base()-> do_func
 
 #define BOOST_LOG_USE_LOG_IF_LEVEL(l, holder, the_level) BOOST_LOG_USE_LOG(l, read_msg().gather().out(), holder->is_enabled(::boost::logging::level:: the_level) )
 
 #define BOOST_LOG_USE_LOG_IF_FILTER(l, the_filter) BOOST_LOG_USE_LOG(l, read_msg().gather().out(), the_filter)
 
-#define BOOST_LOG_USE_SIMPLE_LOG_IF_FILTER(l, is_log_enabled) if ( !(is_log_enabled) ) ; else l ->operator() 
+#define BOOST_LOG_USE_SIMPLE_LOG_IF_FILTER(l, is_log_enabled) if ( !(is_log_enabled) ) ; else l .base() ->read_msg().gather().out 
 
 
 
Deleted: sandbox/logging/boost/logging/process_msg.hpp
==============================================================================
--- sandbox/logging/boost/logging/process_msg.hpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
+++ (empty file)
@@ -1,181 +0,0 @@
-// process_msg.hpp
-
-// Boost Logging library
-//
-// Author: John Torjo, www.torjo.com
-//
-// Copyright (C) 2007 John Torjo (see www.torjo.com for email)
-//
-// Distributed under the Boost Software License, Version 1.0.
-//    (See accompanying file LICENSE_1_0.txt or copy at
-//          http://www.boost.org/LICENSE_1_0.txt)
-//
-// See http://www.boost.org for updates, documentation, and revision history.
-// See http://www.torjo.com/log2/ for more details
-
-
-#ifndef JT28092007_process_msg_HPP_DEFINED
-#define JT28092007_process_msg_HPP_DEFINED
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
-#endif
-
-#include <boost/logging/detail/fwd.hpp>
-#include <boost/logging/detail/forward_constructor.hpp>
-
-namespace boost { namespace logging {
-
-
-    
-    template<class holder, class gather_type> struct gather_holder {
-        gather_holder(const holder & p_this) : m_this(p_this), m_use(true) {}
-        
-        gather_holder(const gather_holder & other) : m_this(other.m_this), m_use(true) {
-            other.m_use = false;
-        }
-
-        ~gather_holder() { 
-            // FIXME handle exiting from exceptions!!!
-            if ( m_use)
-                m_this.on_do_write(m_obj); 
-        }
-        gather_type & gather() { return m_obj; }
-    private:
-        const holder & m_this;
-        mutable gather_type m_obj;
-        mutable bool m_use;
-    };
-
-    namespace detail {
-        template<class type> type& as_non_const(const type & t) { return const_cast<type&>(t); }
-    }
-    
-
-    /** 
-    @brief Processes a message (see @ref workflow_processing "workflow")
-
-    As described in @ref workflow_processing "workflow", processing the message is composed of 2 things:
-    - @ref workflow_2a "Gathering the message" 
-    - @ref workflow_2b "Processing the message"
-
-    The process_msg class has 2 template parameters:
-
-
-    @param gather_msg A new gather instance is created each time a message is written. 
-    The @c gather_msg class needs to be default-constructible.
-    The @c gather_msg must have a function called @c .msg() which contains all information about the written message.
-    It will be passed to the write_msg class.
-    You can implement your own @c gather_msg class, or use any from the gather namespace.
-
-
-    @param write_msg This is the object that does the @ref workflow_2b "second step" - the writing of the message.
-    It can be a simple functor.
-    Or, it can be a more complex object that contains logic of how the message is to be further formatted,
-    and written to multiple destinations. 
-    You can implement your own @c write_msg class, or it can be any of the classes defined in writer namespace.
-    Check out writer::format_write - which allows you to use
-    several formatters to further format the message, and then write it to destinations.
-
-
-
-    \n\n    
-    The logger forwards all message processing to the @c %process_msg class. The @c %process_msg class forwards
-    the gathering of the message to the @c gather_msg class. Once all message is gathered, it's passed on to the writer.
-    This is usually done through a @ref macros "macro".
-
-    @code
-    logger< process_msg<...> ... > g_log;
-
-    #define L_ if ( !g_log) ; else g_log->read_msg().gather().some_function_in_the_gather_class
-
-    // usage
-    L_ << "cool " << "message";
-
-    @endcode
-
-
-
-    \n\n        
-    To understand more on the workflow that involves process_msg:
-    - check out the gather namespace
-    - check out the writer namespace
-    
-    */
-    template<class gather_msg, class write_msg> struct process_msg {
-        typedef process_msg<gather_msg, write_msg> self;
-        typedef write_msg write_type;
-
-        process_msg() {}
-        BOOST_LOGGING_FORWARD_CONSTRUCTOR(process_msg,m_writer)
-
-        // FIXME watch for copy-construction!
-        /** 
-            reads all data about a log message (gathers all the data about it)
-            FIXME
-        */
-        gather_holder<self, gather_msg> read_msg() const { return gather_holder<self, gather_msg>(*this) ; }
-
-        write_msg & writer()                    { return m_writer; }
-        const write_msg & writer() const        { return m_writer; }
-
-        // called after all data has been gathered
-        void on_do_write(gather_msg & gather) const {
-            m_writer( detail::as_non_const(gather.msg()) );
-        }
-
-    private:
-        write_msg m_writer;
-    };
-
-    // FIXME specialize for write_msg* pointer!
-
-
-    namespace detail {
-
-        /** 
-            @brief clone of process_msg, for holding the write_msg as pointer 
-
-            Does offer same things as process_msg, but no access to the @c writer()
-        */
-        template<class gather_msg> struct process_msg_with_ptr_base {
-            typedef process_msg_with_ptr_base<gather_msg> self;
-            typedef typename gather_msg::param param;
-
-            // FIXME watch for copy-construction!
-            /** 
-                reads all data about a log message (gathers all the data about it)
-                FIXME
-            */
-            gather_holder<self, gather_msg> read_msg() const { return gather_holder<self, gather_msg>(*this) ; }
-
-            // called after all data has been gathered
-            void on_do_write(gather_msg & gather) const {
-                on_do_write_impl( as_non_const(gather.msg()) );
-            }
-
-            virtual void on_do_write_impl(param) const = 0;
-        };
-
-        template<class gather_msg, class write_msg> struct process_msg_with_ptr : process_msg_with_ptr_base<gather_msg> {
-            typedef typename gather_msg::param param;
-
-            template<class logger> process_msg_with_ptr(logger & l) {
-                m_writer = &l->writer();
-            }
-
-            void on_do_write_impl(param a) const {
-                (*m_writer)( a) ;
-            }
-
-        private:
-            write_msg *m_writer;
-        };
-    }
-
-
-
-}}
-
-#endif
-
Deleted: sandbox/logging/boost/logging/sink.hpp
==============================================================================
--- sandbox/logging/boost/logging/sink.hpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
+++ (empty file)
@@ -1,82 +0,0 @@
-// sink.hpp
-
-// Boost Logging library
-//
-// Author: John Torjo, www.torjo.com
-//
-// Copyright (C) 2007 John Torjo (see www.torjo.com for email)
-//
-// Distributed under the Boost Software License, Version 1.0.
-//    (See accompanying file LICENSE_1_0.txt or copy at
-//          http://www.boost.org/LICENSE_1_0.txt)
-//
-// See http://www.boost.org for updates, documentation, and revision history.
-// See http://www.torjo.com/log2/ for more details
-
-
-#ifndef JT28092007_sink_HPP_DEFINED
-#define JT28092007_sink_HPP_DEFINED
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
-#endif
-
-#include <boost/logging/detail/fwd.hpp>
-
-namespace boost { namespace logging {
-
-
-
-    /*
-        The sink
-
-        Workflow - we have a sink object, which asks the logger if it's enabled     
-        If the logger is enabled, it also returns the message processor.
-
-        Thus, you can write code like this:
-        if ( sink<some_type> s = find_logger(some_logger) )
-            s.process_msg( ... );
-
-        Note that this is useful only if you have a find_logger function which doesn't always return the same logger
-        (thus, you need to cached the result).
-
-        Otherwise, the logger already has helper funcs, which allow you to do this:
-
-        if ( logger) logger.process_msg()....
-    */
-    template<class process_msg_type> struct sink {
-        template<class logger> sink(const logger & f) {
-            p = f.is_enabled() ? &f.process_msg() : 0;
-        }
-        operator bool() const           { return p != 0; }
-        const process_msg_type & process_msg() { return *p; }
-        /** 
-            Syntactic sugar. Allow writing  
-            if ( sink s = dbg_filter) s->some_func(x);
-        */
-        const process_msg_type* operator->() { return p; }
-    protected:
-        const process_msg_type * p;
-    };
-
-    /** 
-        This negates the sink, allowing you to create LOG macros. That is, it allows for this construct:
-
-        if ( negate_sink<some_type> s = find_logger(some_filter) )
-            ;
-        else
-            s.process_msg() ...;
-
-        @sa sink
-    */
-    template<class process_msg_type> struct negate_sink : sink<process_msg_type> {
-        typedef sink<process_msg_type> base_type;
-        template<class logger> negate_sink(const logger & f) : base_type(f) {}
-        operator bool() const { return base_type::p == 0; }
-    };
-
-}}
-
-
-#endif
-
Modified: sandbox/logging/lib/logging/samples/basic_usage/basic_usage.vcproj
==============================================================================
--- sandbox/logging/lib/logging/samples/basic_usage/basic_usage.vcproj	(original)
+++ sandbox/logging/lib/logging/samples/basic_usage/basic_usage.vcproj	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -41,7 +41,7 @@
                                 Name="VCCLCompilerTool"
                                 Optimization="0"
                                 AdditionalIncludeDirectories=".,../../../.."
-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_LOG_COMPILE_FAST_OFF;_CRT_SECURE_NO_WARNINGS"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS"
                                 MinimalRebuild="true"
                                 BasicRuntimeChecks="3"
                                 RuntimeLibrary="3"
Modified: sandbox/logging/lib/logging/samples/basic_usage/log.cpp
==============================================================================
--- sandbox/logging/lib/logging/samples/basic_usage/log.cpp	(original)
+++ sandbox/logging/lib/logging/samples/basic_usage/log.cpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -1,6 +1,4 @@
 
-// to let the library know we're definining the logs
-#define BOOST_LOG_DEFINE_LOGS
 #include "log.h"
 #include <boost/logging/format.hpp>
 
Modified: sandbox/logging/lib/logging/samples/basic_usage/log.h
==============================================================================
--- sandbox/logging/lib/logging/samples/basic_usage/log.h	(original)
+++ sandbox/logging/lib/logging/samples/basic_usage/log.h	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -1,16 +1,17 @@
 #ifndef LOG_H_header
 #define LOG_H_header
 
-/*      VERY IMPORTANT:
-        If using Visual Studio, don't use #pragma once!             */
-
 #include <boost/logging/format_fwd.hpp>
 
 // Step 1: Optimize : use a cache string, to make formatting the message faster
 BOOST_LOG_FORMAT_MSG( optimize::cache_string_one_str<> ) 
 
+#ifndef BOOST_LOG_COMPILE_FAST
+#include <boost/logging/format.hpp>
+#endif
+
 // Step 3 : Specify your logging class(es)
-typedef boost::logging::logger< boost::logging::use_format_write< > > log_type;
+typedef boost::logging::logger_format_write< > log_type;
 
 // Step 4: declare which filters and loggers you'll use
 BOOST_DECLARE_LOG_FILTER(g_l_filter, level::holder)
Modified: sandbox/logging/lib/logging/samples/scenarios/custom_fmt_dest.cpp
==============================================================================
--- sandbox/logging/lib/logging/samples/scenarios/custom_fmt_dest.cpp	(original)
+++ sandbox/logging/lib/logging/samples/scenarios/custom_fmt_dest.cpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -84,7 +84,7 @@
 #include <boost/logging/format.hpp>
 
 // Step 3 : Specify your logging class(es)
-typedef boost::logging::logger< boost::logging::use_format_write< > > log_type;
+typedef boost::logging::logger_format_write< > log_type;
 
 
 // Step 4: declare which filters and loggers you'll use (usually in a header file)
Modified: sandbox/logging/lib/logging/samples/scenarios/fastest_no_ostr_like.cpp
==============================================================================
--- sandbox/logging/lib/logging/samples/scenarios/fastest_no_ostr_like.cpp	(original)
+++ sandbox/logging/lib/logging/samples/scenarios/fastest_no_ostr_like.cpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -58,17 +58,26 @@
 
 using namespace boost::logging;
 
+struct no_gather {
+    const char * m_msg;
+    no_gather() : m_msg(0) {}
+    const char * msg() const { return m_msg; }
+    void out(const char* msg) { m_msg = msg; }
+    void out(const std::string& msg) { m_msg = msg.c_str(); }
+};
 
 // Step 1 : Specify your logging class(es)
-typedef logger< destination::cout > app_log_type;
-typedef logger< destination::file > err_log_type;
+typedef logger< no_gather, destination::cout > app_log_type;
+typedef logger< no_gather, destination::file > err_log_type;
 
 // Step 2 : Set up a filter
 BOOST_DEFINE_LOG_FILTER(g_log_filter, filter::no_ts ) 
 
 // Step 3: declare which loggers you'll use
-app_log_type g_log_app;
-err_log_type g_log_err("err.txt");
+BOOST_DECLARE_LOG(g_log_app, app_log_type)
+BOOST_DEFINE_LOG_WITH_ARGS( g_log_err, err_log_type, ("err.txt") )
+
+// FIXME most likely I can use BOOST_LOG_USE_IF_FILTER
 
 // Step 4: define the macros through which you'll log
 #define LAPP_ BOOST_LOG_USE_SIMPLE_LOG_IF_FILTER(g_log_app, g_log_filter->is_enabled() ) 
Modified: sandbox/logging/lib/logging/samples/scenarios/fastest_use_ostr_like.cpp
==============================================================================
--- sandbox/logging/lib/logging/samples/scenarios/fastest_use_ostr_like.cpp	(original)
+++ sandbox/logging/lib/logging/samples/scenarios/fastest_use_ostr_like.cpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -61,15 +61,15 @@
 
 
 // Step 1 : Specify your logging class(es)
-typedef logger< process_msg<gather::ostream_like::return_str<>, destination::cout> > app_log_type;
-typedef logger< process_msg<gather::ostream_like::return_str<>, destination::file> > err_log_type;
+typedef logger< default_, destination::cout> app_log_type;
+typedef logger< default_, destination::file> err_log_type;
 
 // Step 2 : Set up a filter
 BOOST_DEFINE_LOG_FILTER(g_log_filter, filter::no_ts )
 
 // Step 3: declare which loggers you'll use
-app_log_type g_log_app;
-err_log_type g_log_err("err.txt");
+BOOST_DECLARE_LOG(g_log_app, app_log_type );
+BOOST_DEFINE_LOG_WITH_ARGS( g_log_err, err_log_type, ("err.txt") )
 
 // Step 4: define the macros through which you'll log
 #define LAPP_ BOOST_LOG_USE_LOG_IF_FILTER(g_log_app, g_log_filter->is_enabled() ) 
Modified: sandbox/logging/lib/logging/samples/scenarios/mul_levels_mul_logers.cpp
==============================================================================
--- sandbox/logging/lib/logging/samples/scenarios/mul_levels_mul_logers.cpp	(original)
+++ sandbox/logging/lib/logging/samples/scenarios/mul_levels_mul_logers.cpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -77,7 +77,7 @@
 
 
 
-#define BOOST_LOG_COMPILE_FAST_OFF
+#define BOOST_LOG_COMPILE_FAST_ON
 #include <boost/logging/format_fwd.hpp>
 
 // Step 1: Optimize : use a cache string, to make formatting the message faster
@@ -86,7 +86,7 @@
 #include <boost/logging/format.hpp>
 
 // Step 3 : Specify your logging class(es)
-typedef boost::logging::logger< boost::logging::use_format_write< > > log_type;
+typedef boost::logging::logger_format_write< > log_type;
 
 
 // Step 4: declare which filters and loggers you'll use (usually in a header file)
Modified: sandbox/logging/lib/logging/samples/scenarios/mul_levels_one_logger.cpp
==============================================================================
--- sandbox/logging/lib/logging/samples/scenarios/mul_levels_one_logger.cpp	(original)
+++ sandbox/logging/lib/logging/samples/scenarios/mul_levels_one_logger.cpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -51,10 +51,10 @@
 
 using namespace boost::logging;
 // Step 3 : Specify your logging class(es)
-typedef logger< use_format_write< > > log_type;
+typedef logger_format_write< > log_type;
 
 // Step 4: declare which filters and loggers you'll use (usually in a header file)
-BOOST_DECLARE_LOG_FILTER(g_log_level, level::holder ) // holds the application log level
+BOOST_DECLARE_LOG_FILTER(g_log_level, level::holder ) 
 BOOST_DECLARE_LOG(g_l, log_type) 
 
 // Step 5: define the macros through which you'll log
@@ -100,7 +100,6 @@
 }
 
 
-
 #ifdef SINGLE_TEST
 
 int main() {
Modified: sandbox/logging/lib/logging/samples/scenarios/mul_loggers_one_filter.cpp
==============================================================================
--- sandbox/logging/lib/logging/samples/scenarios/mul_loggers_one_filter.cpp	(original)
+++ sandbox/logging/lib/logging/samples/scenarios/mul_loggers_one_filter.cpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -86,7 +86,7 @@
 using namespace boost::logging;
 
 // Step 3 : Specify your logging class(es)
-typedef logger< use_format_write< > > log_type;
+typedef logger_format_write< > log_type;
 
 // Step 4: declare which filters and loggers you'll use (usually in a header file)
 BOOST_DECLARE_LOG_FILTER(g_log_filter, filter::no_ts ) 
Modified: sandbox/logging/lib/logging/samples/scenarios/no_levels_with_route.cpp
==============================================================================
--- sandbox/logging/lib/logging/samples/scenarios/no_levels_with_route.cpp	(original)
+++ sandbox/logging/lib/logging/samples/scenarios/no_levels_with_route.cpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -81,7 +81,7 @@
 
 
 // Step 3 : Specify your logging class(es)
-typedef logger< use_format_write< > > log_type;
+typedef logger_format_write< > log_type;
 
 // Step 4: declare which filters and loggers you'll use (usually in a header file)
 BOOST_DECLARE_LOG_FILTER(g_log_filter, filter::no_ts ) 
Modified: sandbox/logging/lib/logging/samples/scenarios/one_loger_one_filter.cpp
==============================================================================
--- sandbox/logging/lib/logging/samples/scenarios/one_loger_one_filter.cpp	(original)
+++ sandbox/logging/lib/logging/samples/scenarios/one_loger_one_filter.cpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -60,7 +60,7 @@
 using namespace boost::logging;
 
 // Step 3 : Specify your logging class(es)
-typedef logger< use_format_write< > > log_type;
+typedef logger_format_write< > log_type;
 
 
 // Step 4: declare which filters and loggers you'll use (usually in a header file)
Modified: sandbox/logging/lib/logging/samples/vc8/loggingvc8/loggingvc8.vcproj
==============================================================================
--- sandbox/logging/lib/logging/samples/vc8/loggingvc8/loggingvc8.vcproj	(original)
+++ sandbox/logging/lib/logging/samples/vc8/loggingvc8/loggingvc8.vcproj	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -507,6 +507,22 @@
                         <File
                                 RelativePath="..\..\..\tests\testfast.cpp"
 				>
+				<FileConfiguration
+					Name="Test|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TestAll|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+					/>
+				</FileConfiguration>
                         </File>
                         <Filter
                                 Name="scenarios"
@@ -550,14 +566,6 @@
                                 <File
                                         RelativePath="..\..\scenarios\mul_levels_mul_logers.cpp"
 					>
-					<FileConfiguration
-						Name="Test|Win32"
-						ExcludedFromBuild="true"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-						/>
-					</FileConfiguration>
                                 </File>
                                 <File
                                         RelativePath="..\..\scenarios\mul_levels_one_logger.cpp"
@@ -737,23 +745,23 @@
 				>
                         </File>
                         <File
-				RelativePath="..\..\..\..\..\boost\logging\logging.hpp"
+				RelativePath="..\..\..\..\..\boost\logging\detail\logger.hpp"
 				>
                         </File>
                         <File
-				RelativePath="..\..\..\..\..\boost\logging\macros.hpp"
+				RelativePath="..\..\..\..\..\boost\logging\logging.hpp"
 				>
                         </File>
                         <File
-				RelativePath="..\..\..\..\..\boost\logging\process_msg\ostream_like.hpp"
+				RelativePath="..\..\..\..\..\boost\logging\macros.hpp"
 				>
                         </File>
                         <File
-				RelativePath="..\..\..\..\..\boost\logging\process_msg.hpp"
+				RelativePath="..\..\..\..\..\boost\logging\process_msg\ostream_like.hpp"
 				>
                         </File>
                         <File
-				RelativePath="..\..\..\..\..\boost\logging\sink.hpp"
+				RelativePath="..\..\..\..\..\boost\logging\detail\sink.hpp"
 				>
                         </File>
                         <File
@@ -897,7 +905,7 @@
                         Name="internal docs"
 			>
                         <File
-				RelativePath="..\..\..\src\changelog.txt"
+				RelativePath="..\..\..\..\..\boost\logging\changelog.hpp"
 				>
                         </File>
                         <File
Deleted: sandbox/logging/lib/logging/src/changelog.txt
==============================================================================
--- sandbox/logging/lib/logging/src/changelog.txt	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
+++ (empty file)
@@ -1,68 +0,0 @@
-
-v0.9.1, 30 oct 2007
-- implemented BOOST_DEFINE_LOG/BOOST_DECLARE_LOG for when not compiling fast
-- BEFORE a breaking change that will happen :
-  - logger as is now will dissapear
-  - the new logger class will be the old process_msg class
-  
-
-v0.9.0, 28 oct 2007
-- use_format_write has 4 params now, I've added 2 new params: thread_safety and gather 
-  - if you want to leave something unchanged, use "default_" as argument
-- added more complex example: Line Counter application
-- Breaking change: 
-  - filters are declared with BOOST_DECLARE_LOG_FILTER, and defined with BOOST_DEFINE_LOG_FILTER
-  - filters are now used with operator->, instead of "."
-  - Example: 
-		BOOST_DEFINE_LOG_LEVEL(g_log_level, level::holder ) 
-		... 
-		g_log_level->set_enabled(level::error);
-  - rationale: filters, same as levels, could be used before main
-
-
-v0.8.3, 22 oct 2007
-- now have 8 scenarios
-- updated documentation
-
-
-v0.8.2, 22 oct 2007
-- added one more common scenario (with_route)
-
-
-v0.8.1, 22 oct 2007
-- added one more common scenario
-- finally figured out how I can add examples using doxygen :)
-
-
-v0.8, 20 oct 2007
-- added use_format_write class
-- removed the filter from the logger class (need to update documentation)
-- added Common scenario
-
-
-v0.7.3, 19 oct 2007
-- added the manipulator::class_ concept
-- added some documentation
-
-
-v0.7.2, 18 oct 2007
-- format_write cares if formatter/destination is generic or not
-- solved bug when deleting manipulators (same_type needed to have a virtual destructor)
-
-v0.4, 9 oct 2007
-- ts_write and on_dedicated_thread work
-
-v0.5, 11 oct 2007
-- compiles
-- added documentation
-
-v0.5.2, 11 oct 2007
-- changed license
-- added to boost
-
-v0.6, 13 oct 2007
-- added formatters from v1. of the library
-- added convert_format cool function :P
-
-v0.7, 15 oct 2007
-- compiles with gcc 3.4.2
Modified: sandbox/logging/lib/logging/tests/testfast.cpp
==============================================================================
--- sandbox/logging/lib/logging/tests/testfast.cpp	(original)
+++ sandbox/logging/lib/logging/tests/testfast.cpp	2007-10-29 21:42:30 EDT (Mon, 29 Oct 2007)
@@ -10,7 +10,7 @@
 using namespace boost::logging;
 
 // Step 3 : Specify your logging class(es)
-typedef logger< use_format_write< > > log_type;
+typedef logger_format_write< > log_type;
 
 BOOST_DECLARE_LOG(g_l, log_type)