$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: john.groups_at_[hidden]
Date: 2007-11-13 04:05:01
Author: jtorjo
Date: 2007-11-13 04:04:58 EST (Tue, 13 Nov 2007)
New Revision: 41055
URL: http://svn.boost.org/trac/boost/changeset/41055
Log:
[logging]
v0.11.9, 12 nov 2007
- applied small patch from Jens Seidel - many thanks!
- moved a few files into detail/ directory - to avoid confusion as to what header should be included when
Added:
   sandbox/logging/boost/logging/detail/error.hpp   (contents, props changed)
   sandbox/logging/boost/logging/detail/filter.hpp   (contents, props changed)
   sandbox/logging/boost/logging/detail/level.hpp   (contents, props changed)
   sandbox/logging/boost/logging/detail/macros.hpp   (contents, props changed)
   sandbox/logging/boost/logging/detail/raw_doc/headers_to_include.hpp   (contents, props changed)
   sandbox/logging/boost/logging/detail/scenario.hpp   (contents, props changed)
Removed:
   sandbox/logging/boost/logging/error.hpp
   sandbox/logging/boost/logging/filter.hpp
   sandbox/logging/boost/logging/level.hpp
   sandbox/logging/boost/logging/macros.hpp
   sandbox/logging/boost/logging/scenario.hpp
Text files modified: 
   sandbox/logging/boost/logging/detail/format_write_detail.hpp          |     2 +-                                      
   sandbox/logging/boost/logging/detail/fwd.hpp                          |     2 +-                                      
   sandbox/logging/boost/logging/detail/raw_doc/changelog.hpp            |     4 +++-                                    
   sandbox/logging/boost/logging/detail/raw_doc/table_of_contents.hpp    |     1 +                                       
   sandbox/logging/boost/logging/detail/use_format_write.hpp             |     2 +-                                      
   sandbox/logging/boost/logging/format/formatter/tags.hpp               |     1 +                                       
   sandbox/logging/boost/logging/format_fwd.hpp                          |     6 +++---                                  
   sandbox/logging/boost/logging/logging.hpp                             |     6 +++---                                  
   sandbox/logging/boost/logging/tags.hpp                                |     6 +++---                                  
   sandbox/logging/lib/logging/internal/gcc/main.cpp                     |     2 --                                      
   sandbox/logging/lib/logging/internal/vc8/loggingvc8/loggingvc8.vcproj |     4 ++++                                    
   11 files changed, 21 insertions(+), 15 deletions(-)
Added: sandbox/logging/boost/logging/detail/error.hpp
==============================================================================
--- (empty file)
+++ sandbox/logging/boost/logging/detail/error.hpp	2007-11-13 04:04:58 EST (Tue, 13 Nov 2007)
@@ -0,0 +1,31 @@
+// error.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_error_HPP_DEFINED
+#define JT28092007_error_HPP_DEFINED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/logging/detail/fwd.hpp>
+
+namespace boost { namespace logging {
+
+}}
+
+#endif
+
Added: sandbox/logging/boost/logging/detail/filter.hpp
==============================================================================
--- (empty file)
+++ sandbox/logging/boost/logging/detail/filter.hpp	2007-11-13 04:04:58 EST (Tue, 13 Nov 2007)
@@ -0,0 +1,218 @@
+// filter.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_filter_HPP_DEFINED
+#define JT28092007_filter_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/tss/tss.hpp>
+
+namespace boost { 
+
+/** 
+    @brief Root namespace. All the logging lib is contained in this namespace, or sub-namespaces of this one.
+*/
+namespace logging {
+
+
+/**
+    @brief Contains filter implementations. A filter tells the logger if it's enabled or not.
+
+
+    The %filter namespace contains a few implementations of %filter classes.
+
+    @c Filter is just a concept. You decide what a @c filter is.
+
+    The minimalistic filter knows only if <i>it's enabled</i>
+
+    Filter interface:
+    @code
+    struct some_filter class {
+        // is filter enabled
+        bool is_enabled() ;
+
+        // ... whatever else you might want
+    };
+    @endcode
+
+    In your logger, you can use any filter class that's already here, or implement your own. Implementing a filter is usually as easy as it gets:
+
+    @code
+    struct filter_no_ts {
+        filter_no_ts() : m_enabled(true) {}
+
+        bool is_enabled() const { return m_enabled; }
+        void set_enabled(bool enabled) { m_enabled = enabled; }
+    private:
+        bool m_enabled;
+    };
+    @endcode
+
+    The filters defined by the library are:
+    - filter::no_ts
+    - filter::ts
+    - filter::use_tss_with_cache
+    - filter::always_enabled
+    - filter::always_disabled
+    - filter::debug_enabled
+    - filter::release_enabled
+    - filter_level (when you use levels)
+
+*/
+namespace filter {
+
+
+/** 
+    Manages is_enabled/set_enabled in a non-thread-safe way (usually, this is the default filter - unless you override it). 
+
+    If you change set_enabled() while program is running, it can take a bit to propagate
+    between threads. Most of the time, this should be acceptable.
+*/
+struct no_ts {
+    no_ts() : m_enabled(true) {}
+    bool is_enabled() const { return m_enabled; }
+    void set_enabled(bool enabled) { m_enabled = enabled; }
+private:
+    bool m_enabled;
+};
+
+
+/** 
+    Filter that is always enabled
+*/
+struct always_enabled {
+    static bool is_enabled() { return true; }
+};
+
+
+/** 
+    Filter that is always disabled
+*/
+struct always_disabled {
+    static bool is_enabled() { return false; }
+};
+
+
+/** 
+    Filter that is enabled in debug mode
+*/
+struct debug_enabled {
+#ifndef NDEBUG
+    static bool is_enabled() { return true; }
+#else
+    static bool is_enabled() { return false; }
+#endif
+};
+
+
+/** 
+    Filter that is enabled in release mode
+*/
+struct release_enabled {
+#ifdef NDEBUG
+    static bool is_enabled() { return true; }
+#else
+    static bool is_enabled() { return false; }
+#endif
+};
+
+
+/** 
+    Thread-safe filter. Manages is_enabled/set_enabled in a thread-safe way. 
+    However, it manages it rather ineffiently - always locking before asking.
+*/
+struct ts {
+    ts() : m_enabled(true) {}
+    bool is_enabled() const { 
+        threading::scoped_lock lk(m_cs);
+        return m_enabled; 
+    }
+    void set_enabled(bool enabled) { 
+        threading::scoped_lock lk(m_cs);
+        m_enabled = enabled; 
+    }
+private:
+    bool m_enabled;
+    mutable threading::mutex m_cs;
+};
+
+
+
+
+#ifndef BOOST_LOG_NO_TSS
+
+/** 
+    Uses TSS (Thread Specific Storage) to find out if a filter is enabled or not. It caches the current "is_enabled" on each thread.
+    Then, at a given period, it retrieves the real "is_enabled".
+
+    @remarks
+
+    Another implementation can be done, which could be faster - where you retrieve the "is_enabled" each X calls on a given thread
+    (like, every 20 calls on a given thread)
+*/
+template<int default_cache_secs = 5> struct use_tss_with_cache {
+    typedef locker::tss_resource_with_cache<bool,default_cache_secs> data;
+
+    use_tss_with_cache(int cache_secs = default_cache_secs) : m_enabled(true, cache_secs) {}
+    bool is_enabled() const { 
+        typename data::read enabled(m_enabled);
+        return enabled.use(); 
+    }
+    void set_enabled(bool enabled) { 
+        typename data::write cur(m_enabled);
+        cur.use() = enabled; 
+    }
+private:
+    data m_enabled;
+};
+
+
+struct use_tss_once_init {
+    typedef locker::tss_resource_once_init<bool> data;
+
+    use_tss_once_init() : m_enabled(true) {}
+    bool is_enabled() const { 
+        data::read enabled(m_enabled);
+        return enabled.use(); 
+    }
+    void set_enabled(bool enabled) { 
+        data::write cur(m_enabled);
+        cur.use() = enabled; 
+    }
+private:
+    data m_enabled;
+};
+
+
+#endif // #ifndef BOOST_LOG_NO_TSS
+
+
+} // namespace filter
+
+
+
+
+
+}}
+
+
+#endif
+
Modified: sandbox/logging/boost/logging/detail/format_write_detail.hpp
==============================================================================
--- sandbox/logging/boost/logging/detail/format_write_detail.hpp	(original)
+++ sandbox/logging/boost/logging/detail/format_write_detail.hpp	2007-11-13 04:04:58 EST (Tue, 13 Nov 2007)
@@ -14,7 +14,7 @@
 // See http://www.torjo.com/log2/ for more details
 
 #ifndef JT28092007_format_HPP_DEFINED
-#error do not include directly include logging/format.hpp or logging/writer/format_write.hpp instead
+#error do not include directly include boost/logging/format.hpp or boost/logging/writer/format_write.hpp instead
 #endif
 
 // this is fixed!
Modified: sandbox/logging/boost/logging/detail/fwd.hpp
==============================================================================
--- sandbox/logging/boost/logging/detail/fwd.hpp	(original)
+++ sandbox/logging/boost/logging/detail/fwd.hpp	2007-11-13 04:04:58 EST (Tue, 13 Nov 2007)
@@ -26,7 +26,7 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <boost/logging/detail/log_keeper.hpp>
-#include <boost/logging/macros.hpp>
+#include <boost/logging/detail/macros.hpp>
 
 #include <boost/logging/detail/ts/ts.hpp>
 #include <boost/logging/detail/ts/ts_resource.hpp>
Added: sandbox/logging/boost/logging/detail/level.hpp
==============================================================================
--- (empty file)
+++ sandbox/logging/boost/logging/detail/level.hpp	2007-11-13 04:04:58 EST (Tue, 13 Nov 2007)
@@ -0,0 +1,216 @@
+// level.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_level_HPP_DEFINED
+#define JT28092007_level_HPP_DEFINED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/logging/detail/fwd.hpp>
+#include <boost/logging/detail/tss/tss.hpp>
+
+namespace boost { namespace logging {
+
+/**
+    @brief Handling levels - classes that can hold and/or deal with levels - filters and level holders
+
+    By default we have these levels:
+
+        - debug (smallest level),
+        - info,
+        - warning ,
+        - error ,
+        - fatal (highest level)
+
+    Depending on which level is enabled for your application, some messages will reach the log: those 
+    messages having at least that level. For instance, if info level is enabled, all 
+    logged messages will reach the log.
+    If warning level is enabled, all messages are logged, but the warnings. 
+    If debug level is enabled, messages that have levels debug, error, fatal will be logged.
+
+    @sa filter_level
+*/
+namespace level {
+    /** the higher the level , the more critical the error */
+    typedef unsigned int type;
+
+    enum {
+        disable_all = (type)-1,
+        enable_all = 0,
+        debug = 1000,
+        info = 2000,
+        warning = 3000,
+        error = 4000,
+        fatal = 5000
+    };
+
+    /**
+        @brief Filter - holds the level, in a non-thread-safe way.
+
+        Holds the level, and tells you if a specific level is enabled.
+        It does this in a non-thread-safe way.
+
+        If you change set_enabled() while program is running, it can take a bit to propagate
+        between threads. Most of the time, this should be acceptable.
+    */
+    struct holder_no_ts {
+        holder_no_ts(type default_level = enable_all) : m_level(default_level) {}
+        bool is_enabled(type level) const { return level >= m_level; }
+        void set_enabled(type level) {
+            m_level = level;
+        }
+    private:
+        type m_level;
+    };
+
+    
+    /** 
+        @brief Filter - holds the level, in a thread-safe way.
+
+        Holds the level, and tells you if a specific level is enabled.
+        It does this in a thread-safe way.
+
+        However, it manages it rather ineffiently - always locking before asking.
+    */
+    struct holder_ts {
+        typedef boost::logging::threading::scoped_lock scoped_lock;
+        typedef boost::logging::threading::mutex mutex;
+
+        holder_ts(type default_level = enable_all) : m_level(default_level) {}
+        bool is_enabled(type level) const { 
+            scoped_lock lk(m_cs);
+            return level >= m_level; 
+        }
+        void set_enabled(type level) {
+            scoped_lock lk(m_cs);
+            m_level = level;
+        }
+    private:
+        type m_level;
+        mutable mutex m_cs;
+    };
+
+    /** 
+        @brief Filter - holds the level - and tells you at compile time if a filter is enabled or not.
+
+        Fix (compile time) holder
+    */
+    template<int fix_level = debug> struct holder_compile_time {
+        static bool is_enabled(type level) { 
+            return fix_level >= level;
+        }
+    };
+
+
+
+
+#ifndef BOOST_LOG_NO_TSS
+
+    /** 
+        @brief Filter - holds the level, in a thread-safe way, using TLS.
+
+        Uses TLS (Thread Local Storage) to find out if a level is enabled or not. It caches the current "is_enabled" on each thread.
+        Then, at a given period, it retrieves the real "level".
+    */
+    template<int default_cache_secs = 5> struct holder_tss_with_cache {
+        typedef locker::tss_resource_with_cache<type, default_cache_secs> data;
+
+        holder_tss_with_cache(int cache_secs = default_cache_secs, type default_level = enable_all) : m_level(default_level, cache_secs) {}
+        bool is_enabled(type test_level) const { 
+            typename data::read cur_level(m_level);
+            return test_level >= cur_level.use(); 
+        }
+        void set_enabled(type level) {
+            typename data::write cur_level(m_level);
+            cur_level.use() = level;
+        }
+    private:
+        data m_level;
+    };
+
+    struct holder_tss_once_init {
+        typedef locker::tss_resource_once_init<type> data;
+
+        holder_tss_once_init(type default_level = enable_all) : m_level(default_level) {}
+        bool is_enabled(type test_level) const { 
+            data::read cur_level(m_level);
+            return test_level >= cur_level.use(); 
+        }
+        void set_enabled(type level) {
+            data::write cur_level(m_level);
+            cur_level.use() = level;
+        }
+    private:
+        data m_level;
+    };
+#endif
+
+
+
+    typedef boost::logging::level_holder_type holder;
+} // namespace level
+
+/** 
+    @brief It's a filter that enables holding a level
+
+    Allows managing whether a level is enabled or not (so that a logggers that wants to use levels,
+    can determine if it's enabled or not)
+
+    Example:
+
+@code
+typedef process_msg< gather::ostream_like::return_str<>, write_to_file> processor;
+level::holder_no_ts level_holder;
+
+typedef logger<processor, filter_level<level::holder_no_ts, level::debug> > debug_logger;
+typedef logger<processor, filter_level<level::holder_no_ts, level::error> > error_logger;
+typedef logger<processor, filter_level<level::holder_no_ts, level::info> > info_logger;
+
+debug_logger g_log_dbg( init_both, "dbg.txt", &level_holder );
+error_logger g_log_err( init_both, "err.txt", &level_holder );
+info_logger g_log_app( init_both, "out.txt", &level_holder );
+#define LAPP_ if ( !g_log_app) ; else g_log_app->read_msg().gather().out()
+#define LERR_ if ( !g_log_err) ; else g_log_err->read_msg().gather().out()
+#define LDBG_ if ( !g_log_dbg) ; else g_log_dbg->read_msg().gather().out()
+
+
+// usage
+LAPP_ << "info at : " << idx << " : reading word " << word;
+LDBG_ << "debug at: " << idx << ", reading " << word;
+LERR_ << "error at: " << idx << ", while reading " << word;
+
+@endcode
+
+    @sa level::holder_no_ts, level::holder_ts, level::holder_tss_with_cache
+*/
+template<class holder_type, int level> struct filter_level {
+    filter_level(holder_type * level_holder) : m_level_holder(*level_holder) {}
+    bool is_enabled() const {
+        return m_level_holder.is_enabled(level);
+    }
+private:
+    holder_type & m_level_holder;
+};
+
+}}
+
+
+
+
+#endif
+
Added: sandbox/logging/boost/logging/detail/macros.hpp
==============================================================================
--- (empty file)
+++ sandbox/logging/boost/logging/detail/macros.hpp	2007-11-13 04:04:58 EST (Tue, 13 Nov 2007)
@@ -0,0 +1,235 @@
+// macros.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
+
+// IMPORTANT : the JT28092007_macros_HPP_DEFINED needs to remain constant - don't change the macro name!
+#ifndef JT28092007_macros_HPP_DEFINED
+#define JT28092007_macros_HPP_DEFINED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#if !defined(BOOST_LOG_TSS_USE_INTERNAL) && !defined(BOOST_LOG_TSS_USE_BOOST) && !defined(BOOST_LOG_TSS_USE_CUSTOM) && !defined(BOOST_LOG_NO_TSS)
+// use has not specified what TSS strategy to use
+#define BOOST_LOG_TSS_USE_INTERNAL
+
+#endif
+
+#include <boost/current_function.hpp>
+
+namespace boost { namespace logging {
+
+/** 
+    @page macros Macros - how, what for?
+
+    The need for macros - creating the object before main.
+
+    When dealing with logs, you will most likely want to use macros: simply to write less.
+    To be efficient, you usually want to write to a log only if it's enabled.
+
+    Either you always write: <tt> if ( g_log) g_log .... </tt>, or, you create macros:
+    
+    @code
+    #define L_ if ( g_log) g_log .... 
+    @endcode
+
+    FIXME to be continued :) explain about the fact that you can create your own macros, depending on what *you* want
+
+    Explain why the if ; else strategy: so that if withing if (x) LOG_ ... ; else blabla - still ok
+        #define L_ if ( g_single_log) ; else g_single_log->read_msg().gather().msg()
+
+    don't want compile fast? then log.h will look easier; but - are you sure you don't want to turn compile fast off?
+
+    @section macros_gathering
+
+    FIXME
+
+    Macros 
+    - BOOST_LOG_COMPILE_FAST_ON
+    - BOOST_LOG_COMPILE_FAST_OFF
+    - BOOST_LOG_COMPILE_FAST
+
+BOOST_LOG_TSS_USE_INTERNAL
+BOOST_LOG_TSS_USE_BOOST
+BOOST_LOG_TSS_USE_CUSTOM
+BOOST_LOG_NO_TSS
+
+*/
+
+#ifdef BOOST_LOG_COMPILE_FAST_ON
+#define BOOST_LOG_COMPILE_FAST
+#elif defined(BOOST_LOG_COMPILE_FAST_OFF)
+#undef BOOST_LOG_COMPILE_FAST
+#else
+// by default, turned on
+#define BOOST_LOG_COMPILE_FAST
+#endif
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Defining filter Macros 
+
+#ifdef BOOST_LOG_COMPILE_FAST
+// ****** Fast compile ******
+
+#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_, ::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; } \
+    ::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; } \
+    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; 
+
+#define BOOST_DEFINE_LOG_WITH_ARGS(name,type, args)  type& name ## _boost_log_impl_() \
+    { static type i ( args ); return i; } \
+    ::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; } \
+    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; 
+
+
+
+#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; 
+
+#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
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Filter Macros 
+
+#define BOOST_DECLARE_LOG_FILTER(name,type) type& name ## _boost_log_filter_impl_(); extern boost::logging::detail::log_filter_keeper<type, name ## _boost_log_filter_impl_ > name; 
+#define BOOST_DEFINE_LOG_FILTER(name,type)  type& name ## _boost_log_filter_impl_() \
+    { static type i; return i; } \
+    namespace { boost::logging::detail::fake_using_log ensure_log_is_created_before_main ## name ( name ## _boost_log_filter_impl_() ); } \
+    boost::logging::detail::log_filter_keeper<type, name ## _boost_log_filter_impl_ > name; 
+
+#define BOOST_DEFINE_LOG_FILTER_WITH_ARGS(name,type, args)  type& name ## _boost_log_filter_impl_() \
+    { static type i ( args ); return i; } \
+    namespace { boost::logging::detail::fake_using_log ensure_log_is_created_before_main ## name ( name ## _boost_log_filter_impl_() ); } \
+    boost::logging::detail::log_filter_keeper<type, name ## _boost_log_filter_impl_ > name; 
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Log Macros
+
+
+#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 .base() ->read_msg().gather().out 
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Format and Destination Macros
+
+/** @section BOOST_LOG_FORMAT_MSG BOOST_LOG_FORMAT_MSG
+
+@note
+    When using BOOST_LOG_FORMAT_MSG or BOOST_LOG_DESTINATION_MSG, you must not be within any namespace scope.
+
+    This is because when using this macro, as @c msg_class, you can specify any of your class, or
+    something residing in @c boost::logging namespace.
+*/
+#define BOOST_LOG_FORMAT_MSG(msg_class) \
+    namespace boost { namespace logging { namespace formatter { \
+    template<> struct msg_type<override> { typedef msg_class & type; typedef msg_class raw_type; }; \
+    }}}
+
+/**
+
+@note
+    When using BOOST_LOG_FORMAT_MSG or BOOST_LOG_DESTINATION_MSG, you must not be within any namespace scope.
+
+    This is because when using this macro, as @c msg_class, you can specify any of your class, or
+    something residing in @c boost::logging namespace.
+*/
+#define BOOST_LOG_DESTINATION_MSG(msg_class) \
+    namespace boost { namespace logging { namespace destination { \
+    template<> struct msg_type<override> { typedef const msg_class & type; typedef msg_class raw_type; }; \
+    }}}
+
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Tags
+
+#define BOOST_LOG_STRINGIZE2(x) #x
+#define BOOST_LOG_STRINGIZE(x) BOOST_LOG_STRINGIZE2(x)
+#define BOOST_LOG_FILE_AND_LINE __FILE__ ":" BOOST_LOG_STRINGIZE(__LINE__) " "
+
+
+#define BOOST_LOG_TAG(tag_type) ::boost::logging::tag:: tag_type
+
+#define BOOST_LOG_TAG_LEVEL(lvl) BOOST_LOG_TAG(level)(::boost::logging::level ::lvl )
+
+#define BOOST_LOG_TAG_FILELINE BOOST_LOG_TAG(file_line) (BOOST_LOG_FILE_AND_LINE)
+
+#define BOOST_LOG_TAG_FUNCTION BOOST_LOG_TAG(function) (BOOST_CURRENT_FUNCTION)
+
+
+}}
+
+#endif
+
Modified: sandbox/logging/boost/logging/detail/raw_doc/changelog.hpp
==============================================================================
--- sandbox/logging/boost/logging/detail/raw_doc/changelog.hpp	(original)
+++ sandbox/logging/boost/logging/detail/raw_doc/changelog.hpp	2007-11-13 04:04:58 EST (Tue, 13 Nov 2007)
@@ -1,7 +1,9 @@
 /** 
 @page page_changelog Changelog
 
-_at_section changelog_cur_ver Current Version: v0.11.8, 12 nov 2007
+@section changelog_cur_ver Current Version: v0.11.9, 12 nov 2007
+- applied small patch from Jens Seidel - many thanks!
+- moved a few files into detail/ directory - to avoid confusion as to what header should be included when
 - fixed bug when including only macros.hpp file - many thanks Jens Seidel!
 - added Boost.Logging Requirements page
 - added tags - and documented them
Added: sandbox/logging/boost/logging/detail/raw_doc/headers_to_include.hpp
==============================================================================
--- (empty file)
+++ sandbox/logging/boost/logging/detail/raw_doc/headers_to_include.hpp	2007-11-13 04:04:58 EST (Tue, 13 Nov 2007)
@@ -0,0 +1,37 @@
+namespace boost { namespace logging {
+
+/** 
+@page headers_to_include Headers to #include
+
+- when using Formatters and Destinations
+
+@code
+// when declaring logs
+#include <boost/logging/format_fwd.hpp>
+
+// when defining logs and you don't use thread-safety
+#include <boost/logging/format.hpp>
+
+// when defining logs and you use thread-safety
+#include <boost/logging/format_ts.hpp>
+@endcode
+
+
+- when using tags
+
+@code
+#include <boost/logging/tags.hpp>
+@endcode
+
+
+- when using Logging, without Formatters/Destinations
+
+@code
+#include <boost/logging/logging.hpp>
+@endcode
+
+
+
+*/
+
+}}
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-11-13 04:04:58 EST (Tue, 13 Nov 2007)
@@ -21,6 +21,7 @@
         - @ref scenario_multiple_files_log_cpp 
         - @ref scenario_multiple_files_main 
 
+- @ref headers_to_include "Headers to #include"
 - @ref scenario::usage "Choose the best filter/logger class, based on your application's needs"
 - @ref tag "Using tags"
 
Added: sandbox/logging/boost/logging/detail/scenario.hpp
==============================================================================
--- (empty file)
+++ sandbox/logging/boost/logging/detail/scenario.hpp	2007-11-13 04:04:58 EST (Tue, 13 Nov 2007)
@@ -0,0 +1,551 @@
+// scenario.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_format_fwd_HPP_DEFINED
+#error Please include boost/logging/format_fwd.hpp instead
+#endif
+
+#ifndef JT28092007_scenario_HPP_DEFINED
+#define JT28092007_scenario_HPP_DEFINED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/logging/detail/fwd.hpp>
+
+namespace boost { namespace logging {
+/** @page your_scenario_examples Examples of customizing your scenario 
+
+Example 1:
+- Use a filter that uses per-thread caching with resync once at 10 secs, 
+- The filter uses levels
+- Use a logger that will favor speed
+
+@code
+using namespace boost::logging::scenario::usage;
+typedef use< filter_::change::often<10>, filter_::level::use_levels, default_, logger_::favor::speed> finder;
+
+BOOST_DECLARE_LOG_FILTER(g_log_filter, finder::filter);
+BOOST_DECLARE_LOG(g_l, finder::logger) 
+...
+@endcode
+
+
+Example 2:
+- Use a filter that is initialized only once, when multiple threads are running
+- The filter does not use levels
+- Use a logger that is initialized only once, when only one thread is running
+
+@code
+using namespace boost::logging::scenario::usage;
+typedef use< filter_::change::set_once_when_multiple_threads, filter_::level::no_levels, logger_::change::set_once_when_one_thread> finder;
+
+BOOST_DECLARE_LOG_FILTER(g_log_filter, finder::filter);
+BOOST_DECLARE_LOG(g_l, finder::logger) 
+...
+@endcode
+
+To see scenario::usage used in code:
+- @ref common_your_scenario "Click to see description of the example"
+- @ref common_your_scenario_code "Click to see the code"
+*/
+
+namespace filter {
+    template<int> struct use_tss_with_cache ;
+    struct no_ts ;
+    struct ts ;
+    struct use_tss_once_init ;
+}
+
+namespace level {
+    template<int> struct holder_tss_with_cache ;
+    struct holder_tss_once_init ;
+    struct holder_ts;
+    struct holder_no_ts ;
+}
+namespace writer {
+    namespace threading {
+        struct no_ts ;
+        struct ts_write ;
+        struct on_dedicated_thread ;
+    }
+}
+
+/** 
+@brief Use this when you have a specific scenario, and want the best logger/filter classes that fit that scenario. Check out scenario::usage and scenario::ts. 
+
+For example, if you want to specify a %scenario based on usage:
+
+@copydoc your_scenario_examples 
+
+*/
+namespace scenario {
+
+/** 
+@brief If you want the library to choose the best logger/filter classes based on how your application will %use the loggers and filters, %use this namespace.
+
+First, don't forget to 
+
+@code 
+using namespace boost::logging::scenario::usage;
+@endcode
+
+Then, you can specify the logger and filter, in a very easy manner
+
+@copydoc your_scenario_examples 
+
+*/
+namespace usage {
+
+    /** @brief Filter usage settings : filter_::change and filter_::level
+    */
+    namespace filter_ {
+        /** @brief When does the filter change? */
+        namespace change {
+            /** @brief Optimize for %often %change. Does per-thread caching. At a given period, it re-synchronizes. 
+                
+                This is the default, for a multi-threaded application.
+
+                @param cache_period_secs At what period should we re-syncronize
+            */
+            template<int cache_period_secs = 5> struct often {};
+
+            /** @brief Set only once, when there's only one thread running - thus, you don't need to worry about thread-syncronizing */
+            struct set_once_when_one_thread {};
+
+            /** @brief Set only once, when there could be multiple thread running. 
+            
+            We automatically implement a strategy to check if the filter/logger has been initialized, and when it's done, we cache
+            the result on every thread */
+            struct set_once_when_multiple_threads {};
+
+            /** @brief This is always accurate. However, it's the slowest too.
+
+            In case of multiple threads, it always locks the logger/filter before accessing it. 
+
+            Not recommended, you should usually go with another strategy (often, set_once_when_one_thread or set_once_when_multiple_threads)
+            */
+            struct always_accurate {};
+
+            /** @brief Single threading. It doesn't matter when/how %often the filter/logger changes. 
+
+                This is the default, for a single-threaded application.
+            */
+            struct single_thread {};
+
+#ifdef BOOST_HAS_THREADS
+            typedef often<> default_;
+#else
+            typedef single_thread default_;
+#endif
+        }
+
+        /** @brief What's our "level" policy? */
+        namespace level {
+            /** @brief not using levels (default) */
+            struct no_levels {};
+            /** @brief using levels */
+            struct use_levels {};
+
+            typedef no_levels default_;
+        }
+    }
+
+    /** @brief Logger %usage settings : logger_::change and logger_::favor
+    */
+    namespace logger_ {
+        /** @brief When does the logger change, that is, how often do you manipulate it? 
+        
+        Note that using the log does not mean changing it. 
+        Manipulation means invoking non-const functions on the logger, like 
+        adding/removing formatters/destinations for instance.
+        */
+        namespace change {
+            /** @brief Optimize for often change. Does per-thread caching. At a given period, it re-synchronizes. This is the default, for multi-threaded applications.
+
+                @param cache_period_secs At what period should we re-syncronize
+            */
+            template<int cache_period_secs = 5> struct often {};
+
+            /** @brief Set only once, when there's only one thread running - thus, you don't need to worry about thread-syncronizing */
+            struct set_once_when_one_thread {};
+
+            /** @brief Set only once, when there could be multiple thread running. 
+            
+            We automatically implement a strategy to check if the filter/logger has been initialized, and when it's done, we cache
+            the result on every thread */
+            struct set_once_when_multiple_threads {};
+
+            /** @brief This is always accurate. However, it's the slowest too.
+
+            In case of multiple threads, it always locks the logger/filter before accessing it. 
+
+            Not recommended, you should usually go with another strategy (often, set_once_when_one_thread or set_once_when_multiple_threads)
+            */
+            struct always_accurate {};
+
+            /** @brief Single threading. It doesn't matter when/how often the filter/logger changes. This is the default, for single-threaded applications.
+            */
+            struct single_thread {};
+
+#ifdef BOOST_HAS_THREADS
+            typedef often<> default_;
+#else
+            typedef single_thread default_;
+#endif
+        }
+
+        /** @brief When logging, what should we %favor? */
+        namespace favor {
+            /** @brief This will favor speed (logging will happen on a dedicated thread). The only problem you could have is if the application crashes.
+
+                In this case, on Windows, the rest of the application will continue, and any non-flushed log message will be flushed.
+
+                On POSIX, this may not be the case.
+            */
+            struct speed {};
+
+            /** @brief All messages will be logged. This is the default for multi-threaded application
+            */
+            struct correctness {};
+
+            /** @brief Single threading. It doesn't matter when/how often the filter/logger changes. This is the default, for single-threaded applications.
+            */
+            struct single_thread {};
+
+#ifdef BOOST_HAS_THREADS
+            typedef correctness default_;
+#else
+            typedef single_thread default_;
+#endif
+        }
+
+        /** @brief How do you gather the message? */
+        namespace gather {
+            /** @brief Using the cool operator<< (default) */
+            struct ostream_like {};
+
+            /** @brief If you want to use your custom class, specify it here */
+            template<class gather_type> struct custom {};
+
+            typedef ostream_like default_;
+        }
+    }
+
+
+
+    namespace detail_find_filter {
+        namespace level = ::boost::logging::scenario::usage::filter_::level;
+        namespace change = ::boost::logging::scenario::usage::filter_::change;
+
+        //////// use levels
+
+        template<class change_> struct find_filter_use_levels {};
+        
+        template<int period_secs> struct find_filter_use_levels< change::often<period_secs> > {
+            typedef ::boost::logging::level::holder_tss_with_cache<period_secs> type;
+        };
+
+        template<> struct find_filter_use_levels< change::set_once_when_one_thread > {
+            typedef ::boost::logging::level::holder_no_ts type;
+        };
+
+        template<> struct find_filter_use_levels< change::set_once_when_multiple_threads > {
+            typedef ::boost::logging::level::holder_tss_once_init type;
+        };
+
+        template<> struct find_filter_use_levels< change::always_accurate > {
+            typedef ::boost::logging::level::holder_ts type;
+        };
+
+        template<> struct find_filter_use_levels< change::single_thread > {
+            typedef ::boost::logging::level::holder_no_ts type;
+        };
+
+
+
+        //////// no levels
+
+        template<class change_> struct find_filter_no_levels {};
+        
+        template<int period_secs> struct find_filter_no_levels< change::often<period_secs> > {
+            typedef ::boost::logging::filter::use_tss_with_cache<period_secs> type;
+        };
+
+        template<> struct find_filter_no_levels< change::set_once_when_one_thread > {
+            typedef ::boost::logging::filter::no_ts type;
+        };
+
+        template<> struct find_filter_no_levels< change::set_once_when_multiple_threads > {
+            typedef ::boost::logging::filter::use_tss_once_init type;
+        };
+
+        template<> struct find_filter_no_levels< change::always_accurate > {
+            typedef ::boost::logging::filter::ts type;
+        };
+
+        template<> struct find_filter_no_levels< change::single_thread > {
+            typedef ::boost::logging::filter::no_ts type;
+        };
+
+
+
+        template<class change_, class level_> struct find_filter {
+            // no levels
+            typedef typename find_filter_no_levels<change_>::type type;
+        };
+
+        template<class change_> struct find_filter<change_, level::use_levels> {
+            typedef typename find_filter_use_levels<change_>::type type;
+        };
+
+    }
+
+
+    namespace detail_find_logger {
+        namespace favor = ::boost::logging::scenario::usage::logger_::favor;
+        namespace change = ::boost::logging::scenario::usage::logger_::change;
+        namespace th = ::boost::logging::writer::threading;
+        namespace gather_usage = ::boost::logging::scenario::usage::logger_::gather;
+
+        template<class favor_> struct find_threading_from_favor {};
+        template<> struct find_threading_from_favor<favor::speed>           { typedef th::on_dedicated_thread type; };
+        template<> struct find_threading_from_favor<favor::correctness>     { typedef th::ts_write type; };
+        template<> struct find_threading_from_favor<favor::single_thread>   { typedef th::no_ts type; };
+
+        template<class gather_type> struct find_gather {};
+        template<> struct find_gather<gather_usage::ostream_like> { typedef ::boost::logging::default_ type; };
+        template<class custom_gather> struct find_gather<gather_usage::custom<custom_gather> > { typedef custom_gather type; };
+        
+        template<class favor_, class change_, class gather> struct find_logger {};
+        
+        template<class favor_, int period_secs, class gather> struct find_logger< favor_, change::often<period_secs>, gather > {
+            typedef typename find_threading_from_favor<favor_>::type threading_type;
+            template<int secs> struct lock_resource {
+               template<class lock_type> struct finder {
+                   typedef typename ::boost::logging::locker::tss_resource_with_cache<lock_type, secs, boost::logging::threading::mutex > type;
+               };
+            };
+
+            typedef ::boost::logging::logger_format_write < default_, default_, threading_type, gather, lock_resource<period_secs> > type;
+        };
+
+        template<class favor_, class gather> struct find_logger< favor_, change::set_once_when_one_thread, gather > {
+            typedef typename find_threading_from_favor<favor_>::type threading_type;
+            struct lock_resource {
+               template<class lock_type> struct finder {
+                    typedef typename locker::ts_resource_single_thread<lock_type> type;
+               };
+            };
+
+            typedef ::boost::logging::logger_format_write< default_, default_, threading_type, gather, lock_resource> type;
+        };
+
+        template<class favor_, class gather> struct find_logger< favor_, change::set_once_when_multiple_threads, gather > {
+            typedef typename find_threading_from_favor<favor_>::type threading_type;
+            struct lock_resource {
+               template<class lock_type> struct finder {
+                    typedef typename locker::tss_resource_once_init<lock_type, boost::logging::threading::mutex > type;
+               };
+            };
+
+            typedef ::boost::logging::logger_format_write< default_, default_, threading_type, gather, lock_resource> type;
+        };
+
+        template<class favor_, class gather> struct find_logger< favor_, change::always_accurate, gather > {
+            typedef typename find_threading_from_favor<favor_>::type threading_type;
+            struct lock_resource {
+               template<class lock_type> struct finder {
+                    typedef typename locker::ts_resource<lock_type, boost::logging::threading::mutex > type;
+               };
+            };
+
+            typedef ::boost::logging::logger_format_write< default_, default_, threading_type, gather, lock_resource> type;
+        };
+
+        template<class favor_, class gather> struct find_logger< favor_, change::single_thread, gather > {
+            typedef typename find_threading_from_favor<favor_>::type threading_type;
+            struct lock_resource {
+               template<class lock_type> struct finder {
+                    typedef typename locker::ts_resource_single_thread<lock_type> type;
+               };
+            };
+
+            typedef ::boost::logging::logger_format_write< default_, default_, threading_type, gather, lock_resource> type;
+        };
+    }
+
+    /** 
+        @brief Finds a filter class and a logger class that fit your application's needs
+
+        For this to happen, you will first need to specify your needs (the template parameters you'll pass to this class)
+
+        @param filter_change (optional) How does the %filter change? Any of the classes in the filter_::change namespace
+        @param filter_level_ (optional) Does our %filter %use levels? Any of the classes in the filter_::level namespace
+        @param logger_change (optional) How does our %logger change? Any of the classes in the logger_::change namespace
+        @param logger_favor (optional) What does the %logger favor? Any of the classes in the logger_::favor namespace
+        @param logger_gather (optional) What to %use as gather class. Any of the classes in the logger_::gather namespace
+
+        @copydoc your_scenario_examples 
+    */
+    template<
+        class filter_change = default_,
+        class filter_level = default_, 
+        class logger_change = default_,
+        class logger_favor = default_,
+        class logger_gather = default_ >
+    struct use {
+
+    private:
+        typedef typename use_default<filter_change, filter_::change::default_ >::type filter_change_type;
+        typedef typename use_default<filter_level, filter_::level::default_ >::type filter_level_type;
+
+        typedef typename use_default<logger_change, logger_::change::default_ >::type logger_change_type;
+        typedef typename use_default<logger_favor, logger_::favor::default_>::type logger_favor_type;
+        typedef typename use_default<logger_gather, logger_::gather::default_>::type gather_usage_type;
+
+        typedef typename detail_find_logger::find_gather<gather_usage_type> ::type gather_type;
+
+    public:
+        typedef typename detail_find_filter::find_filter<filter_change_type, filter_level_type>::type filter;
+        typedef typename detail_find_logger::find_logger< logger_favor_type, logger_change_type, gather_type>::type logger;
+
+    };
+}
+
+/** 
+@brief Find out the right logger/filter, based on thread-safety of logger(s)/filter(s)
+
+First, don't forget to 
+    
+@code 
+using namespace boost::logging::scenario::ts;
+@endcode
+
+Then, you can specify the logger and filter, in a very easy manner
+
+Example:
+- Use a filter that uses TSS (Thread Specific Storage)
+- The filter uses levels
+- Use a logger that uses TSS
+
+@code
+using namespace boost::logging::scenario::ts;
+typedef use< filter_::use_tss, level_::use_levels, logger_::use_tss> finder;
+
+BOOST_DECLARE_LOG_FILTER(g_log_filter, finder::filter);
+BOOST_DECLARE_LOG(g_l, finder::logger) 
+...
+@endcode
+
+
+To see how you can specify the logger/filter based on how you will %use them, see usage namespace.
+*/
+namespace ts {
+    /** @brief filter uses levels? */
+    struct level_ {
+        /** @brief type of %filter levels %usage */
+        enum type {
+            /** @brief %use levels */
+            use_levels,
+            /** @brief don't %use levels */
+            no_levels
+        };
+    };
+
+    /** @brief filter thread-safety */
+    struct filter_ {
+        /** @brief type of filter thread-safety */
+        enum type {
+            /** @brief not thread-safe */
+            none,
+            /** @brief %use TSS (thread-specific storage) */
+            use_tss,
+            /** @brief thread-safe (but slow) */
+            ts
+        };
+    };
+
+    /** logger thread-safety */
+    struct logger_ {
+        /** @brief type of logger thread-safety */
+        enum type {
+            /** @brief not thread-safe */
+            none,
+            /** @brief %use TSS (thread-specific storage) */
+            use_tss,
+            /** @brief thread-safe (but slow) */
+            ts
+        };
+    };
+
+    namespace detail {
+        namespace th = ::boost::logging::writer::threading;
+
+        template<filter_::type,level_::type> struct find_filter {};
+        template<> struct find_filter<filter_::none, level_::no_levels > { typedef ::boost::logging::filter::no_ts type; };
+        template<> struct find_filter<filter_::use_tss, level_::no_levels> { typedef  ::boost::logging::filter::use_tss_with_cache<5> type; };
+        template<> struct find_filter<filter_::ts, level_::no_levels> { typedef ::boost::logging::filter::ts type; };
+
+        template<> struct find_filter<filter_::none, level_::use_levels > { typedef ::boost::logging::level::holder_no_ts type; };
+        template<> struct find_filter<filter_::use_tss, level_::use_levels > { typedef ::boost::logging::level::holder_tss_with_cache<5> type; };
+        template<> struct find_filter<filter_::ts, level_::use_levels > { typedef ::boost::logging::level::holder_ts type; };
+
+        template<logger_::type> struct find_logger {};
+        template<> struct find_logger<logger_::none> { 
+            struct lock_resource {
+               template<class lock_type> struct finder {
+                    typedef typename locker::ts_resource_single_thread<lock_type> type;
+               };
+            };
+            typedef ::boost::logging::logger_format_write< default_, default_, th::no_ts, default_, lock_resource > type ; 
+        };
+        template<> struct find_logger<logger_::use_tss> { 
+            struct lock_resource {
+               template<class lock_type> struct finder {
+                   typedef typename ::boost::logging::locker::tss_resource_with_cache<lock_type, 5, boost::logging::threading::mutex > type;
+               };
+            };
+
+            typedef ::boost::logging::logger_format_write< default_, default_, th::ts_write, default_, lock_resource > type ; 
+        };
+        template<> struct find_logger<logger_::ts> { 
+            struct lock_resource {
+               template<class lock_type> struct finder {
+                    typedef typename locker::ts_resource<lock_type, boost::logging::threading::mutex > type;
+               };
+            };
+
+            typedef ::boost::logging::logger_format_write< default_, default_, th::ts_write, default_, lock_resource > type ; 
+        };
+    }
+
+    /** @brief Find the right logger and filter, based on thread-safety: filter_::type, level_::type and logger_::type 
+    
+        @copydoc ts
+    */
+    template<filter_::type filter_type, level_::type level_type, logger_::type logger_type> struct use {
+        typedef typename detail::find_filter<filter_type,level_type>::type filter;
+        typedef typename detail::find_logger<logger_type>::type logger;
+    };
+}
+
+}
+
+}}
+
+#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-11-13 04:04:58 EST (Tue, 13 Nov 2007)
@@ -14,7 +14,7 @@
 // See http://www.torjo.com/log2/ for more details
 
 #ifndef JT28092007_format_write_detail_HPP_DEFINED
-#error do not include this directly. Include logging/format.hpp instead
+#error do not include this directly. Include boost/logging/format.hpp instead
 #endif
 
 #ifndef JT28092007_use_format_write_HPP_DEFINED
Deleted: sandbox/logging/boost/logging/error.hpp
==============================================================================
--- sandbox/logging/boost/logging/error.hpp	2007-11-13 04:04:58 EST (Tue, 13 Nov 2007)
+++ (empty file)
@@ -1,31 +0,0 @@
-// error.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_error_HPP_DEFINED
-#define JT28092007_error_HPP_DEFINED
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
-#endif
-
-#include <boost/logging/detail/fwd.hpp>
-
-namespace boost { namespace logging {
-
-}}
-
-#endif
-
Deleted: sandbox/logging/boost/logging/filter.hpp
==============================================================================
--- sandbox/logging/boost/logging/filter.hpp	2007-11-13 04:04:58 EST (Tue, 13 Nov 2007)
+++ (empty file)
@@ -1,218 +0,0 @@
-// filter.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_filter_HPP_DEFINED
-#define JT28092007_filter_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/tss/tss.hpp>
-
-namespace boost { 
-
-/** 
-    @brief Root namespace. All the logging lib is contained in this namespace, or sub-namespaces of this one.
-*/
-namespace logging {
-
-
-/**
-    @brief Contains filter implementations. A filter tells the logger if it's enabled or not.
-
-
-    The %filter namespace contains a few implementations of %filter classes.
-
-    @c Filter is just a concept. You decide what a @c filter is.
-
-    The minimalistic filter knows only if <i>it's enabled</i>
-
-    Filter interface:
-    @code
-    struct some_filter class {
-        // is filter enabled
-        bool is_enabled() ;
-
-        // ... whatever else you might want
-    };
-    @endcode
-
-    In your logger, you can use any filter class that's already here, or implement your own. Implementing a filter is usually as easy as it gets:
-
-    @code
-    struct filter_no_ts {
-        filter_no_ts() : m_enabled(true) {}
-
-        bool is_enabled() const { return m_enabled; }
-        void set_enabled(bool enabled) { m_enabled = enabled; }
-    private:
-        bool m_enabled;
-    };
-    @endcode
-
-    The filters defined by the library are:
-    - filter::no_ts
-    - filter::ts
-    - filter::use_tss_with_cache
-    - filter::always_enabled
-    - filter::always_disabled
-    - filter::debug_enabled
-    - filter::release_enabled
-    - filter_level (when you use levels)
-
-*/
-namespace filter {
-
-
-/** 
-    Manages is_enabled/set_enabled in a non-thread-safe way (usually, this is the default filter - unless you override it). 
-
-    If you change set_enabled() while program is running, it can take a bit to propagate
-    between threads. Most of the time, this should be acceptable.
-*/
-struct no_ts {
-    no_ts() : m_enabled(true) {}
-    bool is_enabled() const { return m_enabled; }
-    void set_enabled(bool enabled) { m_enabled = enabled; }
-private:
-    bool m_enabled;
-};
-
-
-/** 
-    Filter that is always enabled
-*/
-struct always_enabled {
-    static bool is_enabled() { return true; }
-};
-
-
-/** 
-    Filter that is always disabled
-*/
-struct always_disabled {
-    static bool is_enabled() { return false; }
-};
-
-
-/** 
-    Filter that is enabled in debug mode
-*/
-struct debug_enabled {
-#ifndef NDEBUG
-    static bool is_enabled() { return true; }
-#else
-    static bool is_enabled() { return false; }
-#endif
-};
-
-
-/** 
-    Filter that is enabled in release mode
-*/
-struct release_enabled {
-#ifdef NDEBUG
-    static bool is_enabled() { return true; }
-#else
-    static bool is_enabled() { return false; }
-#endif
-};
-
-
-/** 
-    Thread-safe filter. Manages is_enabled/set_enabled in a thread-safe way. 
-    However, it manages it rather ineffiently - always locking before asking.
-*/
-struct ts {
-    ts() : m_enabled(true) {}
-    bool is_enabled() const { 
-        threading::scoped_lock lk(m_cs);
-        return m_enabled; 
-    }
-    void set_enabled(bool enabled) { 
-        threading::scoped_lock lk(m_cs);
-        m_enabled = enabled; 
-    }
-private:
-    bool m_enabled;
-    mutable threading::mutex m_cs;
-};
-
-
-
-
-#ifndef BOOST_LOG_NO_TSS
-
-/** 
-    Uses TSS (Thread Specific Storage) to find out if a filter is enabled or not. It caches the current "is_enabled" on each thread.
-    Then, at a given period, it retrieves the real "is_enabled".
-
-    @remarks
-
-    Another implementation can be done, which could be faster - where you retrieve the "is_enabled" each X calls on a given thread
-    (like, every 20 calls on a given thread)
-*/
-template<int default_cache_secs = 5> struct use_tss_with_cache {
-    typedef locker::tss_resource_with_cache<bool,default_cache_secs> data;
-
-    use_tss_with_cache(int cache_secs = default_cache_secs) : m_enabled(true, cache_secs) {}
-    bool is_enabled() const { 
-        typename data::read enabled(m_enabled);
-        return enabled.use(); 
-    }
-    void set_enabled(bool enabled) { 
-        typename data::write cur(m_enabled);
-        cur.use() = enabled; 
-    }
-private:
-    data m_enabled;
-};
-
-
-struct use_tss_once_init {
-    typedef locker::tss_resource_once_init<bool> data;
-
-    use_tss_once_init() : m_enabled(true) {}
-    bool is_enabled() const { 
-        data::read enabled(m_enabled);
-        return enabled.use(); 
-    }
-    void set_enabled(bool enabled) { 
-        data::write cur(m_enabled);
-        cur.use() = enabled; 
-    }
-private:
-    data m_enabled;
-};
-
-
-#endif // #ifndef BOOST_LOG_NO_TSS
-
-
-} // namespace filter
-
-
-
-
-
-}}
-
-
-#endif
-
Modified: sandbox/logging/boost/logging/format/formatter/tags.hpp
==============================================================================
--- sandbox/logging/boost/logging/format/formatter/tags.hpp	(original)
+++ sandbox/logging/boost/logging/format/formatter/tags.hpp	2007-11-13 04:04:58 EST (Tue, 13 Nov 2007)
@@ -26,6 +26,7 @@
 #include <boost/logging/detail/manipulator.hpp>
 #include <boost/logging/format/formatter/time.hpp>
 #include <sstream>
+#include <boost/logging/format_fwd.hpp> // dump_level
 
 namespace boost { namespace logging { namespace formatter {
 
Modified: sandbox/logging/boost/logging/format_fwd.hpp
==============================================================================
--- sandbox/logging/boost/logging/format_fwd.hpp	(original)
+++ sandbox/logging/boost/logging/format_fwd.hpp	2007-11-13 04:04:58 EST (Tue, 13 Nov 2007)
@@ -14,7 +14,7 @@
 // See http://www.torjo.com/log2/ for more details
 
 
-
+// this needs to be fixed!
 #ifndef JT28092007_format_fwd_HPP_DEFINED
 #define JT28092007_format_fwd_HPP_DEFINED
 
@@ -110,7 +110,7 @@
 };
 
 /** 
-    Specifies the class that will dump the levels . Used by formatter::tag::level class.
+    Specifies the class that will dump the levels. Used by formatter::tag::level class.
 */
 template<class T = override> struct dump_level {
     typedef dump_default_levels type;
@@ -120,7 +120,7 @@
 }}
 
 
-#include <boost/logging/scenario.hpp>
+#include <boost/logging/detail/scenario.hpp>
 
 #endif
 
Deleted: sandbox/logging/boost/logging/level.hpp
==============================================================================
--- sandbox/logging/boost/logging/level.hpp	2007-11-13 04:04:58 EST (Tue, 13 Nov 2007)
+++ (empty file)
@@ -1,216 +0,0 @@
-// level.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_level_HPP_DEFINED
-#define JT28092007_level_HPP_DEFINED
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
-#endif
-
-#include <boost/logging/detail/fwd.hpp>
-#include <boost/logging/detail/tss/tss.hpp>
-
-namespace boost { namespace logging {
-
-/**
-    @brief Handling levels - classes that can hold and/or deal with levels - filters and level holders
-
-    By default we have these levels:
-
-        - debug (smallest level),
-        - info,
-        - warning ,
-        - error ,
-        - fatal (highest level)
-
-    Depending on which level is enabled for your application, some messages will reach the log: those 
-    messages having at least that level. For instance, if info level is enabled, all 
-    logged messages will reach the log.
-    If warning level is enabled, all messages are logged, but the warnings. 
-    If debug level is enabled, messages that have levels debug, error, fatal will be logged.
-
-    @sa filter_level
-*/
-namespace level {
-    /** the higher the level , the more critical the error */
-    typedef unsigned int type;
-
-    enum {
-        disable_all = (type)-1,
-        enable_all = 0,
-        debug = 1000,
-        info = 2000,
-        warning = 3000,
-        error = 4000,
-        fatal = 5000
-    };
-
-    /**
-        @brief Filter - holds the level, in a non-thread-safe way.
-
-        Holds the level, and tells you if a specific level is enabled.
-        It does this in a non-thread-safe way.
-
-        If you change set_enabled() while program is running, it can take a bit to propagate
-        between threads. Most of the time, this should be acceptable.
-    */
-    struct holder_no_ts {
-        holder_no_ts(type default_level = enable_all) : m_level(default_level) {}
-        bool is_enabled(type level) const { return level >= m_level; }
-        void set_enabled(type level) {
-            m_level = level;
-        }
-    private:
-        type m_level;
-    };
-
-    
-    /** 
-        @brief Filter - holds the level, in a thread-safe way.
-
-        Holds the level, and tells you if a specific level is enabled.
-        It does this in a thread-safe way.
-
-        However, it manages it rather ineffiently - always locking before asking.
-    */
-    struct holder_ts {
-        typedef boost::logging::threading::scoped_lock scoped_lock;
-        typedef boost::logging::threading::mutex mutex;
-
-        holder_ts(type default_level = enable_all) : m_level(default_level) {}
-        bool is_enabled(type level) const { 
-            scoped_lock lk(m_cs);
-            return level >= m_level; 
-        }
-        void set_enabled(type level) {
-            scoped_lock lk(m_cs);
-            m_level = level;
-        }
-    private:
-        type m_level;
-        mutable mutex m_cs;
-    };
-
-    /** 
-        @brief Filter - holds the level - and tells you at compile time if a filter is enabled or not.
-
-        Fix (compile time) holder
-    */
-    template<int fix_level = debug> struct holder_compile_time {
-        static bool is_enabled(type level) { 
-            return fix_level >= level;
-        }
-    };
-
-
-
-
-#ifndef BOOST_LOG_NO_TSS
-
-    /** 
-        @brief Filter - holds the level, in a thread-safe way, using TLS.
-
-        Uses TLS (Thread Local Storage) to find out if a level is enabled or not. It caches the current "is_enabled" on each thread.
-        Then, at a given period, it retrieves the real "level".
-    */
-    template<int default_cache_secs = 5> struct holder_tss_with_cache {
-        typedef locker::tss_resource_with_cache<type, default_cache_secs> data;
-
-        holder_tss_with_cache(int cache_secs = default_cache_secs, type default_level = enable_all) : m_level(default_level, cache_secs) {}
-        bool is_enabled(type test_level) const { 
-            typename data::read cur_level(m_level);
-            return test_level >= cur_level.use(); 
-        }
-        void set_enabled(type level) {
-            typename data::write cur_level(m_level);
-            cur_level.use() = level;
-        }
-    private:
-        data m_level;
-    };
-
-    struct holder_tss_once_init {
-        typedef locker::tss_resource_once_init<type> data;
-
-        holder_tss_once_init(type default_level = enable_all) : m_level(default_level) {}
-        bool is_enabled(type test_level) const { 
-            data::read cur_level(m_level);
-            return test_level >= cur_level.use(); 
-        }
-        void set_enabled(type level) {
-            data::write cur_level(m_level);
-            cur_level.use() = level;
-        }
-    private:
-        data m_level;
-    };
-#endif
-
-
-
-    typedef boost::logging::level_holder_type holder;
-} // namespace level
-
-/** 
-    @brief It's a filter that enables holding a level
-
-    Allows managing whether a level is enabled or not (so that a logggers that wants to use levels,
-    can determine if it's enabled or not)
-
-    Example:
-
-_at_code
-typedef process_msg< gather::ostream_like::return_str<>, write_to_file> processor;
-level::holder_no_ts level_holder;
-
-typedef logger<processor, filter_level<level::holder_no_ts, level::debug> > debug_logger;
-typedef logger<processor, filter_level<level::holder_no_ts, level::error> > error_logger;
-typedef logger<processor, filter_level<level::holder_no_ts, level::info> > info_logger;
-
-debug_logger g_log_dbg( init_both, "dbg.txt", &level_holder );
-error_logger g_log_err( init_both, "err.txt", &level_holder );
-info_logger g_log_app( init_both, "out.txt", &level_holder );
-#define LAPP_ if ( !g_log_app) ; else g_log_app->read_msg().gather().out()
-#define LERR_ if ( !g_log_err) ; else g_log_err->read_msg().gather().out()
-#define LDBG_ if ( !g_log_dbg) ; else g_log_dbg->read_msg().gather().out()
-
-
-// usage
-LAPP_ << "info at : " << idx << " : reading word " << word;
-LDBG_ << "debug at: " << idx << ", reading " << word;
-LERR_ << "error at: " << idx << ", while reading " << word;
-
-_at_endcode
-
-    @sa level::holder_no_ts, level::holder_ts, level::holder_tss_with_cache
-*/
-template<class holder_type, int level> struct filter_level {
-    filter_level(holder_type * level_holder) : m_level_holder(*level_holder) {}
-    bool is_enabled() const {
-        return m_level_holder.is_enabled(level);
-    }
-private:
-    holder_type & m_level_holder;
-};
-
-}}
-
-
-
-
-#endif
-
Modified: sandbox/logging/boost/logging/logging.hpp
==============================================================================
--- sandbox/logging/boost/logging/logging.hpp	(original)
+++ sandbox/logging/boost/logging/logging.hpp	2007-11-13 04:04:58 EST (Tue, 13 Nov 2007)
@@ -22,11 +22,11 @@
 #endif
 
 #include <boost/logging/detail/fwd.hpp>
-#include <boost/logging/filter.hpp>
+#include <boost/logging/detail/filter.hpp>
 #include <boost/logging/detail/logger.hpp>
-#include <boost/logging/macros.hpp>
+#include <boost/logging/detail/macros.hpp>
 #include <boost/logging/detail/tss/tss.hpp>
-#include <boost/logging/level.hpp>
+#include <boost/logging/detail/level.hpp>
 
 // just in case we might think of using formatters
 #include <boost/logging/detail/format_msg_type.hpp>
Deleted: sandbox/logging/boost/logging/macros.hpp
==============================================================================
--- sandbox/logging/boost/logging/macros.hpp	2007-11-13 04:04:58 EST (Tue, 13 Nov 2007)
+++ (empty file)
@@ -1,235 +0,0 @@
-// macros.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
-
-// IMPORTANT : the JT28092007_macros_HPP_DEFINED needs to remain constant - don't change the macro name!
-#ifndef JT28092007_macros_HPP_DEFINED
-#define JT28092007_macros_HPP_DEFINED
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
-#endif
-
-#if !defined(BOOST_LOG_TSS_USE_INTERNAL) && !defined(BOOST_LOG_TSS_USE_BOOST) && !defined(BOOST_LOG_TSS_USE_CUSTOM) && !defined(BOOST_LOG_NO_TSS)
-// use has not specified what TSS strategy to use
-#define BOOST_LOG_TSS_USE_INTERNAL
-
-#endif
-
-#include <boost/current_function.hpp>
-
-namespace boost { namespace logging {
-
-/** 
-    @page macros Macros - how, what for?
-
-    The need for macros - creating the object before main.
-
-    When dealing with logs, you will most likely want to use macros: simply to write less.
-    To be efficient, you usually want to write to a log only if it's enabled.
-
-    Either you always write: <tt> if ( g_log) g_log .... </tt>, or, you create macros:
-    
-    @code
-    #define L_ if ( g_log) g_log .... 
-    @endcode
-
-    FIXME to be continued :) explain about the fact that you can create your own macros, depending on what *you* want
-
-    Explain why the if ; else strategy: so that if withing if (x) LOG_ ... ; else blabla - still ok
-        #define L_ if ( g_single_log) ; else g_single_log->read_msg().gather().msg()
-
-    don't want compile fast? then log.h will look easier; but - are you sure you don't want to turn compile fast off?
-
-    @section macros_gathering
-
-    FIXME
-
-    Macros 
-    - BOOST_LOG_COMPILE_FAST_ON
-    - BOOST_LOG_COMPILE_FAST_OFF
-    - BOOST_LOG_COMPILE_FAST
-
-BOOST_LOG_TSS_USE_INTERNAL
-BOOST_LOG_TSS_USE_BOOST
-BOOST_LOG_TSS_USE_CUSTOM
-BOOST_LOG_NO_TSS
-
-*/
-
-#ifdef BOOST_LOG_COMPILE_FAST_ON
-#define BOOST_LOG_COMPILE_FAST
-#elif defined(BOOST_LOG_COMPILE_FAST_OFF)
-#undef BOOST_LOG_COMPILE_FAST
-#else
-// by default, turned on
-#define BOOST_LOG_COMPILE_FAST
-#endif
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// Defining filter Macros 
-
-#ifdef BOOST_LOG_COMPILE_FAST
-// ****** Fast compile ******
-
-#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_, ::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; } \
-    ::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; } \
-    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; 
-
-#define BOOST_DEFINE_LOG_WITH_ARGS(name,type, args)  type& name ## _boost_log_impl_() \
-    { static type i ( args ); return i; } \
-    ::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; } \
-    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; 
-
-
-
-#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; 
-
-#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
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// Filter Macros 
-
-#define BOOST_DECLARE_LOG_FILTER(name,type) type& name ## _boost_log_filter_impl_(); extern boost::logging::detail::log_filter_keeper<type, name ## _boost_log_filter_impl_ > name; 
-#define BOOST_DEFINE_LOG_FILTER(name,type)  type& name ## _boost_log_filter_impl_() \
-    { static type i; return i; } \
-    namespace { boost::logging::detail::fake_using_log ensure_log_is_created_before_main ## name ( name ## _boost_log_filter_impl_() ); } \
-    boost::logging::detail::log_filter_keeper<type, name ## _boost_log_filter_impl_ > name; 
-
-#define BOOST_DEFINE_LOG_FILTER_WITH_ARGS(name,type, args)  type& name ## _boost_log_filter_impl_() \
-    { static type i ( args ); return i; } \
-    namespace { boost::logging::detail::fake_using_log ensure_log_is_created_before_main ## name ( name ## _boost_log_filter_impl_() ); } \
-    boost::logging::detail::log_filter_keeper<type, name ## _boost_log_filter_impl_ > name; 
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// Log Macros
-
-
-#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 .base() ->read_msg().gather().out 
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// Format and Destination Macros
-
-/** @section BOOST_LOG_FORMAT_MSG BOOST_LOG_FORMAT_MSG
-
-_at_note
-    When using BOOST_LOG_FORMAT_MSG or BOOST_LOG_DESTINATION_MSG, you must not be within any namespace scope.
-
-    This is because when using this macro, as @c msg_class, you can specify any of your class, or
-    something residing in @c boost::logging namespace.
-*/
-#define BOOST_LOG_FORMAT_MSG(msg_class) \
-    namespace boost { namespace logging { namespace formatter { \
-    template<> struct msg_type<override> { typedef msg_class & type; typedef msg_class raw_type; }; \
-    }}}
-
-/**
-
-_at_note
-    When using BOOST_LOG_FORMAT_MSG or BOOST_LOG_DESTINATION_MSG, you must not be within any namespace scope.
-
-    This is because when using this macro, as @c msg_class, you can specify any of your class, or
-    something residing in @c boost::logging namespace.
-*/
-#define BOOST_LOG_DESTINATION_MSG(msg_class) \
-    namespace boost { namespace logging { namespace destination { \
-    template<> struct msg_type<override> { typedef const msg_class & type; typedef msg_class raw_type; }; \
-    }}}
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// Tags
-
-#define BOOST_LOG_STRINGIZE2(x) #x
-#define BOOST_LOG_STRINGIZE(x) BOOST_LOG_STRINGIZE2(x)
-#define BOOST_LOG_FILE_AND_LINE __FILE__ ":" BOOST_LOG_STRINGIZE(__LINE__) " "
-
-
-#define BOOST_LOG_TAG(tag_type) ::boost::logging::tag:: tag_type
-
-#define BOOST_LOG_TAG_LEVEL(lvl) BOOST_LOG_TAG(level)(::boost::logging::level ::lvl )
-
-#define BOOST_LOG_TAG_FILELINE BOOST_LOG_TAG(file_line) (BOOST_LOG_FILE_AND_LINE)
-
-#define BOOST_LOG_TAG_FUNCTION BOOST_LOG_TAG(function) (BOOST_CURRENT_FUNCTION)
-
-
-}}
-
-#endif
-
Deleted: sandbox/logging/boost/logging/scenario.hpp
==============================================================================
--- sandbox/logging/boost/logging/scenario.hpp	2007-11-13 04:04:58 EST (Tue, 13 Nov 2007)
+++ (empty file)
@@ -1,548 +0,0 @@
-// scenario.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_scenario_HPP_DEFINED
-#define JT28092007_scenario_HPP_DEFINED
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
-#endif
-
-#include <boost/logging/detail/fwd.hpp>
-
-namespace boost { namespace logging {
-/** @page your_scenario_examples Examples of customizing your scenario 
-
-Example 1:
-- Use a filter that uses per-thread caching with resync once at 10 secs, 
-- The filter uses levels
-- Use a logger that will favor speed
-
-_at_code
-using namespace boost::logging::scenario::usage;
-typedef use< filter_::change::often<10>, filter_::level::use_levels, default_, logger_::favor::speed> finder;
-
-BOOST_DECLARE_LOG_FILTER(g_log_filter, finder::filter);
-BOOST_DECLARE_LOG(g_l, finder::logger) 
-...
-_at_endcode
-
-
-Example 2:
-- Use a filter that is initialized only once, when multiple threads are running
-- The filter does not use levels
-- Use a logger that is initialized only once, when only one thread is running
-
-_at_code
-using namespace boost::logging::scenario::usage;
-typedef use< filter_::change::set_once_when_multiple_threads, filter_::level::no_levels, logger_::change::set_once_when_one_thread> finder;
-
-BOOST_DECLARE_LOG_FILTER(g_log_filter, finder::filter);
-BOOST_DECLARE_LOG(g_l, finder::logger) 
-...
-_at_endcode
-
-To see scenario::usage used in code:
-- @ref common_your_scenario "Click to see description of the example"
-- @ref common_your_scenario_code "Click to see the code"
-*/
-
-namespace filter {
-    template<int> struct use_tss_with_cache ;
-    struct no_ts ;
-    struct ts ;
-    struct use_tss_once_init ;
-}
-
-namespace level {
-    template<int> struct holder_tss_with_cache ;
-    struct holder_tss_once_init ;
-    struct holder_ts;
-    struct holder_no_ts ;
-}
-namespace writer {
-    namespace threading {
-        struct no_ts ;
-        struct ts_write ;
-        struct on_dedicated_thread ;
-    }
-}
-
-/** 
-_at_brief Use this when you have a specific scenario, and want the best logger/filter classes that fit that scenario. Check out scenario::usage and scenario::ts. 
-
-For example, if you want to specify a %scenario based on usage:
-
-_at_copydoc your_scenario_examples 
-
-*/
-namespace scenario {
-
-/** 
-_at_brief If you want the library to choose the best logger/filter classes based on how your application will %use the loggers and filters, %use this namespace.
-
-First, don't forget to 
-
-_at_code 
-using namespace boost::logging::scenario::usage;
-_at_endcode
-
-Then, you can specify the logger and filter, in a very easy manner
-
-_at_copydoc your_scenario_examples 
-
-*/
-namespace usage {
-
-    /** @brief Filter usage settings : filter_::change and filter_::level
-    */
-    namespace filter_ {
-        /** @brief When does the filter change? */
-        namespace change {
-            /** @brief Optimize for %often %change. Does per-thread caching. At a given period, it re-synchronizes. 
-                
-                This is the default, for a multi-threaded application.
-
-                @param cache_period_secs At what period should we re-syncronize
-            */
-            template<int cache_period_secs = 5> struct often {};
-
-            /** @brief Set only once, when there's only one thread running - thus, you don't need to worry about thread-syncronizing */
-            struct set_once_when_one_thread {};
-
-            /** @brief Set only once, when there could be multiple thread running. 
-            
-            We automatically implement a strategy to check if the filter/logger has been initialized, and when it's done, we cache
-            the result on every thread */
-            struct set_once_when_multiple_threads {};
-
-            /** @brief This is always accurate. However, it's the slowest too.
-
-            In case of multiple threads, it always locks the logger/filter before accessing it. 
-
-            Not recommended, you should usually go with another strategy (often, set_once_when_one_thread or set_once_when_multiple_threads)
-            */
-            struct always_accurate {};
-
-            /** @brief Single threading. It doesn't matter when/how %often the filter/logger changes. 
-
-                This is the default, for a single-threaded application.
-            */
-            struct single_thread {};
-
-#ifdef BOOST_HAS_THREADS
-            typedef often<> default_;
-#else
-            typedef single_thread default_;
-#endif
-        }
-
-        /** @brief What's our "level" policy? */
-        namespace level {
-            /** @brief not using levels (default) */
-            struct no_levels {};
-            /** @brief using levels */
-            struct use_levels {};
-
-            typedef no_levels default_;
-        }
-    }
-
-    /** @brief Logger %usage settings : logger_::change and logger_::favor
-    */
-    namespace logger_ {
-        /** @brief When does the logger change, that is, how often do you manipulate it? 
-        
-        Note that using the log does not mean changing it. 
-        Manipulation means invoking non-const functions on the logger, like 
-        adding/removing formatters/destinations for instance.
-        */
-        namespace change {
-            /** @brief Optimize for often change. Does per-thread caching. At a given period, it re-synchronizes. This is the default, for multi-threaded applications.
-
-                @param cache_period_secs At what period should we re-syncronize
-            */
-            template<int cache_period_secs = 5> struct often {};
-
-            /** @brief Set only once, when there's only one thread running - thus, you don't need to worry about thread-syncronizing */
-            struct set_once_when_one_thread {};
-
-            /** @brief Set only once, when there could be multiple thread running. 
-            
-            We automatically implement a strategy to check if the filter/logger has been initialized, and when it's done, we cache
-            the result on every thread */
-            struct set_once_when_multiple_threads {};
-
-            /** @brief This is always accurate. However, it's the slowest too.
-
-            In case of multiple threads, it always locks the logger/filter before accessing it. 
-
-            Not recommended, you should usually go with another strategy (often, set_once_when_one_thread or set_once_when_multiple_threads)
-            */
-            struct always_accurate {};
-
-            /** @brief Single threading. It doesn't matter when/how often the filter/logger changes. This is the default, for single-threaded applications.
-            */
-            struct single_thread {};
-
-#ifdef BOOST_HAS_THREADS
-            typedef often<> default_;
-#else
-            typedef single_thread default_;
-#endif
-        }
-
-        /** @brief When logging, what should we %favor? */
-        namespace favor {
-            /** @brief This will favor speed (logging will happen on a dedicated thread). The only problem you could have is if the application crashes.
-
-                In this case, on Windows, the rest of the application will continue, and any non-flushed log message will be flushed.
-
-                On POSIX, this may not be the case.
-            */
-            struct speed {};
-
-            /** @brief All messages will be logged. This is the default for multi-threaded application
-            */
-            struct correctness {};
-
-            /** @brief Single threading. It doesn't matter when/how often the filter/logger changes. This is the default, for single-threaded applications.
-            */
-            struct single_thread {};
-
-#ifdef BOOST_HAS_THREADS
-            typedef correctness default_;
-#else
-            typedef single_thread default_;
-#endif
-        }
-
-        /** @brief How do you gather the message? */
-        namespace gather {
-            /** @brief Using the cool operator<< (default) */
-            struct ostream_like {};
-
-            /** @brief If you want to use your custom class, specify it here */
-            template<class gather_type> struct custom {};
-
-            typedef ostream_like default_;
-        }
-    }
-
-
-
-    namespace detail_find_filter {
-        namespace level = ::boost::logging::scenario::usage::filter_::level;
-        namespace change = ::boost::logging::scenario::usage::filter_::change;
-
-        //////// use levels
-
-        template<class change_> struct find_filter_use_levels {};
-        
-        template<int period_secs> struct find_filter_use_levels< change::often<period_secs> > {
-            typedef ::boost::logging::level::holder_tss_with_cache<period_secs> type;
-        };
-
-        template<> struct find_filter_use_levels< change::set_once_when_one_thread > {
-            typedef ::boost::logging::level::holder_no_ts type;
-        };
-
-        template<> struct find_filter_use_levels< change::set_once_when_multiple_threads > {
-            typedef ::boost::logging::level::holder_tss_once_init type;
-        };
-
-        template<> struct find_filter_use_levels< change::always_accurate > {
-            typedef ::boost::logging::level::holder_ts type;
-        };
-
-        template<> struct find_filter_use_levels< change::single_thread > {
-            typedef ::boost::logging::level::holder_no_ts type;
-        };
-
-
-
-        //////// no levels
-
-        template<class change_> struct find_filter_no_levels {};
-        
-        template<int period_secs> struct find_filter_no_levels< change::often<period_secs> > {
-            typedef ::boost::logging::filter::use_tss_with_cache<period_secs> type;
-        };
-
-        template<> struct find_filter_no_levels< change::set_once_when_one_thread > {
-            typedef ::boost::logging::filter::no_ts type;
-        };
-
-        template<> struct find_filter_no_levels< change::set_once_when_multiple_threads > {
-            typedef ::boost::logging::filter::use_tss_once_init type;
-        };
-
-        template<> struct find_filter_no_levels< change::always_accurate > {
-            typedef ::boost::logging::filter::ts type;
-        };
-
-        template<> struct find_filter_no_levels< change::single_thread > {
-            typedef ::boost::logging::filter::no_ts type;
-        };
-
-
-
-        template<class change_, class level_> struct find_filter {
-            // no levels
-            typedef typename find_filter_no_levels<change_>::type type;
-        };
-
-        template<class change_> struct find_filter<change_, level::use_levels> {
-            typedef typename find_filter_use_levels<change_>::type type;
-        };
-
-    }
-
-
-    namespace detail_find_logger {
-        namespace favor = ::boost::logging::scenario::usage::logger_::favor;
-        namespace change = ::boost::logging::scenario::usage::logger_::change;
-        namespace th = ::boost::logging::writer::threading;
-        namespace gather_usage = ::boost::logging::scenario::usage::logger_::gather;
-
-        template<class favor_> struct find_threading_from_favor {};
-        template<> struct find_threading_from_favor<favor::speed>           { typedef th::on_dedicated_thread type; };
-        template<> struct find_threading_from_favor<favor::correctness>     { typedef th::ts_write type; };
-        template<> struct find_threading_from_favor<favor::single_thread>   { typedef th::no_ts type; };
-
-        template<class gather_type> struct find_gather {};
-        template<> struct find_gather<gather_usage::ostream_like> { typedef ::boost::logging::default_ type; };
-        template<class custom_gather> struct find_gather<gather_usage::custom<custom_gather> > { typedef custom_gather type; };
-        
-        template<class favor_, class change_, class gather> struct find_logger {};
-        
-        template<class favor_, int period_secs, class gather> struct find_logger< favor_, change::often<period_secs>, gather > {
-            typedef typename find_threading_from_favor<favor_>::type threading_type;
-            template<int secs> struct lock_resource {
-               template<class lock_type> struct finder {
-                   typedef typename ::boost::logging::locker::tss_resource_with_cache<lock_type, secs, boost::logging::threading::mutex > type;
-               };
-            };
-
-            typedef ::boost::logging::logger_format_write < default_, default_, threading_type, gather, lock_resource<period_secs> > type;
-        };
-
-        template<class favor_, class gather> struct find_logger< favor_, change::set_once_when_one_thread, gather > {
-            typedef typename find_threading_from_favor<favor_>::type threading_type;
-            struct lock_resource {
-               template<class lock_type> struct finder {
-                    typedef typename locker::ts_resource_single_thread<lock_type> type;
-               };
-            };
-
-            typedef ::boost::logging::logger_format_write< default_, default_, threading_type, gather, lock_resource> type;
-        };
-
-        template<class favor_, class gather> struct find_logger< favor_, change::set_once_when_multiple_threads, gather > {
-            typedef typename find_threading_from_favor<favor_>::type threading_type;
-            struct lock_resource {
-               template<class lock_type> struct finder {
-                    typedef typename locker::tss_resource_once_init<lock_type, boost::logging::threading::mutex > type;
-               };
-            };
-
-            typedef ::boost::logging::logger_format_write< default_, default_, threading_type, gather, lock_resource> type;
-        };
-
-        template<class favor_, class gather> struct find_logger< favor_, change::always_accurate, gather > {
-            typedef typename find_threading_from_favor<favor_>::type threading_type;
-            struct lock_resource {
-               template<class lock_type> struct finder {
-                    typedef typename locker::ts_resource<lock_type, boost::logging::threading::mutex > type;
-               };
-            };
-
-            typedef ::boost::logging::logger_format_write< default_, default_, threading_type, gather, lock_resource> type;
-        };
-
-        template<class favor_, class gather> struct find_logger< favor_, change::single_thread, gather > {
-            typedef typename find_threading_from_favor<favor_>::type threading_type;
-            struct lock_resource {
-               template<class lock_type> struct finder {
-                    typedef typename locker::ts_resource_single_thread<lock_type> type;
-               };
-            };
-
-            typedef ::boost::logging::logger_format_write< default_, default_, threading_type, gather, lock_resource> type;
-        };
-    }
-
-    /** 
-        @brief Finds a filter class and a logger class that fit your application's needs
-
-        For this to happen, you will first need to specify your needs (the template parameters you'll pass to this class)
-
-        @param filter_change (optional) How does the %filter change? Any of the classes in the filter_::change namespace
-        @param filter_level_ (optional) Does our %filter %use levels? Any of the classes in the filter_::level namespace
-        @param logger_change (optional) How does our %logger change? Any of the classes in the logger_::change namespace
-        @param logger_favor (optional) What does the %logger favor? Any of the classes in the logger_::favor namespace
-        @param logger_gather (optional) What to %use as gather class. Any of the classes in the logger_::gather namespace
-
-        @copydoc your_scenario_examples 
-    */
-    template<
-        class filter_change = default_,
-        class filter_level = default_, 
-        class logger_change = default_,
-        class logger_favor = default_,
-        class logger_gather = default_ >
-    struct use {
-
-    private:
-        typedef typename use_default<filter_change, filter_::change::default_ >::type filter_change_type;
-        typedef typename use_default<filter_level, filter_::level::default_ >::type filter_level_type;
-
-        typedef typename use_default<logger_change, logger_::change::default_ >::type logger_change_type;
-        typedef typename use_default<logger_favor, logger_::favor::default_>::type logger_favor_type;
-        typedef typename use_default<logger_gather, logger_::gather::default_>::type gather_usage_type;
-
-        typedef typename detail_find_logger::find_gather<gather_usage_type> ::type gather_type;
-
-    public:
-        typedef typename detail_find_filter::find_filter<filter_change_type, filter_level_type>::type filter;
-        typedef typename detail_find_logger::find_logger< logger_favor_type, logger_change_type, gather_type>::type logger;
-
-    };
-}
-
-/** 
-_at_brief Find out the right logger/filter, based on thread-safety of logger(s)/filter(s)
-
-First, don't forget to 
-    
-_at_code 
-using namespace boost::logging::scenario::ts;
-_at_endcode
-
-Then, you can specify the logger and filter, in a very easy manner
-
-Example:
-- Use a filter that uses TSS (Thread Specific Storage)
-- The filter uses levels
-- Use a logger that uses TSS
-
-_at_code
-using namespace boost::logging::scenario::ts;
-typedef use< filter_::use_tss, level_::use_levels, logger_::use_tss> finder;
-
-BOOST_DECLARE_LOG_FILTER(g_log_filter, finder::filter);
-BOOST_DECLARE_LOG(g_l, finder::logger) 
-...
-_at_endcode
-
-
-To see how you can specify the logger/filter based on how you will %use them, see usage namespace.
-*/
-namespace ts {
-    /** @brief filter uses levels? */
-    struct level_ {
-        /** @brief type of %filter levels %usage */
-        enum type {
-            /** @brief %use levels */
-            use_levels,
-            /** @brief don't %use levels */
-            no_levels
-        };
-    };
-
-    /** @brief filter thread-safety */
-    struct filter_ {
-        /** @brief type of filter thread-safety */
-        enum type {
-            /** @brief not thread-safe */
-            none,
-            /** @brief %use TSS (thread-specific storage) */
-            use_tss,
-            /** @brief thread-safe (but slow) */
-            ts
-        };
-    };
-
-    /** logger thread-safety */
-    struct logger_ {
-        /** @brief type of logger thread-safety */
-        enum type {
-            /** @brief not thread-safe */
-            none,
-            /** @brief %use TSS (thread-specific storage) */
-            use_tss,
-            /** @brief thread-safe (but slow) */
-            ts
-        };
-    };
-
-    namespace detail {
-        namespace th = ::boost::logging::writer::threading;
-
-        template<filter_::type,level_::type> struct find_filter {};
-        template<> struct find_filter<filter_::none, level_::no_levels > { typedef ::boost::logging::filter::no_ts type; };
-        template<> struct find_filter<filter_::use_tss, level_::no_levels> { typedef  ::boost::logging::filter::use_tss_with_cache<5> type; };
-        template<> struct find_filter<filter_::ts, level_::no_levels> { typedef ::boost::logging::filter::ts type; };
-
-        template<> struct find_filter<filter_::none, level_::use_levels > { typedef ::boost::logging::level::holder_no_ts type; };
-        template<> struct find_filter<filter_::use_tss, level_::use_levels > { typedef ::boost::logging::level::holder_tss_with_cache<5> type; };
-        template<> struct find_filter<filter_::ts, level_::use_levels > { typedef ::boost::logging::level::holder_ts type; };
-
-        template<logger_::type> struct find_logger {};
-        template<> struct find_logger<logger_::none> { 
-            struct lock_resource {
-               template<class lock_type> struct finder {
-                    typedef typename locker::ts_resource_single_thread<lock_type> type;
-               };
-            };
-            typedef ::boost::logging::logger_format_write< default_, default_, th::no_ts, default_, lock_resource > type ; 
-        };
-        template<> struct find_logger<logger_::use_tss> { 
-            struct lock_resource {
-               template<class lock_type> struct finder {
-                   typedef typename ::boost::logging::locker::tss_resource_with_cache<lock_type, 5, boost::logging::threading::mutex > type;
-               };
-            };
-
-            typedef ::boost::logging::logger_format_write< default_, default_, th::ts_write, default_, lock_resource > type ; 
-        };
-        template<> struct find_logger<logger_::ts> { 
-            struct lock_resource {
-               template<class lock_type> struct finder {
-                    typedef typename locker::ts_resource<lock_type, boost::logging::threading::mutex > type;
-               };
-            };
-
-            typedef ::boost::logging::logger_format_write< default_, default_, th::ts_write, default_, lock_resource > type ; 
-        };
-    }
-
-    /** @brief Find the right logger and filter, based on thread-safety: filter_::type, level_::type and logger_::type 
-    
-        @copydoc ts
-    */
-    template<filter_::type filter_type, level_::type level_type, logger_::type logger_type> struct use {
-        typedef typename detail::find_filter<filter_type,level_type>::type filter;
-        typedef typename detail::find_logger<logger_type>::type logger;
-    };
-}
-
-}
-
-}}
-
-#endif
-
Modified: sandbox/logging/boost/logging/tags.hpp
==============================================================================
--- sandbox/logging/boost/logging/tags.hpp	(original)
+++ sandbox/logging/boost/logging/tags.hpp	2007-11-13 04:04:58 EST (Tue, 13 Nov 2007)
@@ -242,7 +242,7 @@
 @param param5 (optional) Fifth tag
 @param param6 (optional) Sixth tag
 @param param7 (optional) Seventh tag
-_at_param param8 (optional) Eith tag
+@param param8 (optional) Eigth tag
 @param param9 (optional) Nineth tag
 @param param10 (optional) Tenth tag
 */
@@ -281,11 +281,11 @@
     }
 
     template<class tag_type> const tag_type & get_tag() const {
-        return operator const tag_type&();
+        return this->operator const tag_type&();
     }
 
     void set_string(const string_type & str) {
-        m_string = str;
+        tag_base_type::m_string = str;
     }
 
 private:
Modified: sandbox/logging/lib/logging/internal/gcc/main.cpp
==============================================================================
--- sandbox/logging/lib/logging/internal/gcc/main.cpp	(original)
+++ sandbox/logging/lib/logging/internal/gcc/main.cpp	2007-11-13 04:04:58 EST (Tue, 13 Nov 2007)
@@ -1,5 +1,3 @@
-#include <boost/logging/macros.hpp>
-#include <boost/logging/detail/fwd.hpp>
 
 
 
Modified: sandbox/logging/lib/logging/internal/vc8/loggingvc8/loggingvc8.vcproj
==============================================================================
--- sandbox/logging/lib/logging/internal/vc8/loggingvc8/loggingvc8.vcproj	(original)
+++ sandbox/logging/lib/logging/internal/vc8/loggingvc8/loggingvc8.vcproj	2007-11-13 04:04:58 EST (Tue, 13 Nov 2007)
@@ -858,6 +858,10 @@
 				>
                         </File>
                         <File
+				RelativePath="..\..\..\..\..\boost\logging\detail\raw_doc\headers_to_include.hpp"
+				>
+			</File>
+			<File
                                 RelativePath="..\..\..\..\..\boost\logging\detail\raw_doc\main.hpp"
 				>
                         </File>