$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: john.groups_at_[hidden]
Date: 2008-01-12 11:28:05
Author: jtorjo
Date: 2008-01-12 11:28:04 EST (Sat, 12 Jan 2008)
New Revision: 42699
URL: http://svn.boost.org/trac/boost/changeset/42699
Log:
[logging]
v0.13.10, 12 jan 2008
- added test_rolling_file (tests rolling_file)
Added:
   sandbox/logging/lib/logging/tests/test_rolling_file/test_rolling_file.sln   (contents, props changed)
Removed:
   sandbox/logging/lib/logging/tests/test_rolling_file/test.sln
Properties modified: 
   sandbox/logging/lib/logging/internal/vc8/loggingvc8/   (props changed)
   sandbox/logging/lib/logging/tests/test_file/   (props changed)
   sandbox/logging/lib/logging/tests/test_rolling_file/   (props changed)
Text files modified: 
   sandbox/logging/boost/logging/detail/raw_doc/changelog.hpp            |     3                                         
   sandbox/logging/boost/logging/format/destination/rolling_file.hpp     |    18 ++                                      
   sandbox/logging/lib/logging/internal/vc8/loggingvc8/loggingvc8.vcproj |     9 +                                       
   sandbox/logging/lib/logging/internal/vc8/loggingvc8/test_now.cpp      |   104 ++++++++----------                      
   sandbox/logging/lib/logging/tests/test_rolling_file/test.cpp          |   218 +++++++++++++++++++++++++++++++++++++++ 
   sandbox/logging/lib/logging/tests/test_rolling_file/test.vcproj       |     6                                         
   6 files changed, 290 insertions(+), 68 deletions(-)
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	2008-01-12 11:28:04 EST (Sat, 12 Jan 2008)
@@ -1,7 +1,8 @@
 /** 
 @page page_changelog Changelog
 
-_at_section changelog_cur_ver Current Version: v0.13.9, 11 jan 2008
+@section changelog_cur_ver Current Version: v0.13.10, 12 jan 2008
+- added test_rolling_file (tests rolling_file)
 - solved bug - when used LOG_ in switch - thanks to Todd Neal!
 - added test for formatter::file
 - included <map> in destination::named - many thanks Jens Seidel!
Modified: sandbox/logging/boost/logging/format/destination/rolling_file.hpp
==============================================================================
--- sandbox/logging/boost/logging/format/destination/rolling_file.hpp	(original)
+++ sandbox/logging/boost/logging/format/destination/rolling_file.hpp	2008-01-12 11:28:04 EST (Sat, 12 Jan 2008)
@@ -49,6 +49,7 @@
         , initial_erase(this, false)
         , start_where_size_not_exceeded(this, true) 
         , flush_each_time(this, false)
+        , extra_flags(this, std::ios_base::out) 
     {}
 
     /// maximum size in bytes, by default 1Mb
@@ -63,6 +64,9 @@
 
     /// if true, always flush after write (by default, false)
     flag::t<bool> flush_each_time;
+
+    /// just in case you have some extra flags to pass, when opening each file
+    flag::t<std::ios_base::openmode> extra_flags;
 };
 
 namespace detail {
@@ -92,6 +96,9 @@
                         // file not found, we'll create it now
                         break;
 
+                if ( m_cur_idx >= m_flags.file_count())
+                    // all files are too full (we'll overwrite the first one)
+                    m_cur_idx = 0;
             }
 
             recreate_file();
@@ -99,17 +106,20 @@
 
         std::string file_name(int idx) {
             std::ostringstream out; 
-            out << m_name_prefix << "." << (idx+1);
+            if ( idx > 0)
+                out << m_name_prefix << "." << (idx+1);
+            else
+                out << m_name_prefix;
             return out.str();
         }
 
         void recreate_file() {
             m_out = boost::shared_ptr< std::basic_ofstream<char_type> >(new std::basic_ofstream<char_type>( file_name(m_cur_idx).c_str(),
-                std::ios_base::out | std::ios_base::app));
-            if ( m_out->tellp() > m_flags.max_size_bytes()) {
+                m_flags.extra_flags() | std::ios_base::out | std::ios_base::app));
+            if ( fs::file_size( file_name(m_cur_idx)) > m_flags.max_size_bytes()) {
                 // this file is already full - clear it first
                 m_out = boost::shared_ptr< std::basic_ofstream<char_type> >(new std::basic_ofstream<char_type>( file_name(m_cur_idx).c_str(),
-                    std::ios_base::out | std::ios_base::trunc));
+                    m_flags.extra_flags() | std::ios_base::out | std::ios_base::trunc));
             }
         }
 
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	2008-01-12 11:28:04 EST (Sat, 12 Jan 2008)
@@ -330,7 +330,6 @@
 				>
                                 <FileConfiguration
                                         Name="Test|Win32"
-					ExcludedFromBuild="true"
 					>
                                         <Tool
                                                 Name="VCCLCompilerTool"
@@ -792,6 +791,14 @@
                         <File
                                 RelativePath="..\..\..\samples\scenarios\cache_before_init.cpp"
 				>
+				<FileConfiguration
+					Name="Test|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+					/>
+				</FileConfiguration>
                         </File>
                         <File
                                 RelativePath="..\..\..\samples\scenarios\custom_fmt_dest.cpp"
Modified: sandbox/logging/lib/logging/internal/vc8/loggingvc8/test_now.cpp
==============================================================================
--- sandbox/logging/lib/logging/internal/vc8/loggingvc8/test_now.cpp	(original)
+++ sandbox/logging/lib/logging/internal/vc8/loggingvc8/test_now.cpp	2008-01-12 11:28:04 EST (Sat, 12 Jan 2008)
@@ -1,103 +1,93 @@
 /**
-_at_example using_tags.cpp
+@example one_loger_one_filter.cpp
 
-_at_copydoc using_tags
+@copydoc one_loger_one_filter
 
-_at_page using_tags using_tags.cpp Example
+@page one_loger_one_filter one_loger_one_filter.cpp Example
 
 
 This usage:
-- You have one logger and one filter, which can be turned on or off
+- You have one logger
+- You have one filter, which can be turned on or off
 - You want to format the message before it's written 
 - The logger has several log destinations
-    - The output goes to console, and a file called out.txt
-    - Formatting - message will look like this: <tt>[file/line] [thread_id] [idx] [time] message [enter] </tt>
+    - The output goes to console, debug output window, and a file called out.txt
+    - Formatting - prefix each message by its index, and append newline
 
 Optimizations:
 - use a cache string (from optimize namespace), in order to make formatting the message faster
 
 In this example, all output will be written to the console, debug window, and "out.txt" file.
-The output can look like:
+It will be:
 
 @code
-logging\samples\scenarios\using_tags.cpp:94 [T7204] [1] 14:55 this is so cool 1
-logging\samples\scenarios\using_tags.cpp:95 [T7204] [2] 14:55 this is so cool again 2
+[1] this is so cool 1
+[2] this is so cool again 2
+[3] hello, world
+[4] good to be back ;) 3
 @endcode
 
 */
 
 
-
+#define BOOST_LOG_BEFORE_INIT_IGNORE_BEFORE_INIT
 #include <boost/logging/format_fwd.hpp>
-#include <boost/logging/tags.hpp>
-#include <boost/logging/tag/high_precision_time.hpp>
 
 // Step 1: Optimize : use a cache string, to make formatting the message faster
-namespace bl = boost::logging;
-typedef bl::tag::holder< bl::optimize::cache_string_one_str<>, bl::tag::file_line, bl::tag::thread_id, bl::tag::high_precision_time> log_string;
-BOOST_LOG_FORMAT_MSG( log_string )
-
+BOOST_LOG_FORMAT_MSG( optimize::cache_string_one_str<> )
 
-#include <boost/logging/format_ts.hpp>
-#include <boost/logging/format/formatter/tags.hpp>
-#include <boost/logging/format/formatter/named_spacer.hpp>
-#include <boost/logging/format/destination/named.hpp>
+#include <boost/logging/format.hpp>
+#include <boost/logging/writer/ts_write.hpp>
 
 using namespace boost::logging;
 
 // Step 3 : Specify your logging class(es)
-using namespace boost::logging::scenario::usage;
-typedef use<
-        //  the filter is always accurate (but slow)
-        filter_::change::always_accurate, 
-        //  filter does not use levels
-        filter_::level::no_levels, 
-        // the logger is initialized once, when only one thread is running
-        logger_::change::set_once_when_one_thread, 
-        // the logger favors speed (on a dedicated thread)
-        logger_::favor::correctness> finder;
+typedef logger_format_write< > log_type;
+
 
 // Step 4: declare which filters and loggers you'll use (usually in a header file)
-BOOST_DECLARE_LOG_FILTER(g_log_filter, finder::filter ) 
-BOOST_DECLARE_LOG(g_l, finder::logger) 
+BOOST_DECLARE_LOG_FILTER(g_log_filter, filter::no_ts ) 
+BOOST_DECLARE_LOG(g_l, log_type) 
 
 // Step 5: define the macros through which you'll log
-#define L_ BOOST_LOG_USE_LOG_IF_FILTER(g_l, g_log_filter->is_enabled() ) .set_tag( BOOST_LOG_TAG_FILELINE)
+#define L_ BOOST_LOG_USE_LOG_IF_FILTER(g_l, g_log_filter->is_enabled() ) 
 
 // Step 6: Define the filters and loggers you'll use (usually in a source file)
-BOOST_DEFINE_LOG_FILTER(g_log_filter, finder::filter ) 
-BOOST_DEFINE_LOG(g_l, finder::logger) 
+BOOST_DEFINE_LOG_FILTER(g_log_filter, filter::no_ts ) 
+BOOST_DEFINE_LOG(g_l, log_type)
 
+void f () {
+    BOOST_SCOPED_LOG_CTX(L_);// << "execution_pool::executor_defer_func(...)";
+    L_ << "Executing component ";
+}
 
-void using_tags_example() {
+void one_logger_one_filter_example() {
     // Step 7: add formatters and destinations
     //         That is, how the message is to be formatted and where should it be written to
 
-    g_l->writer().add_formatter( formatter::named_spacer( "%fileline% [T%thread_id%] [%idx%] %time%" )
-        .add( "time", formatter::tag::high_precision_time("$hh:$mm:$ss.$mili ") )                // time tag
-        .add( "idx", formatter::idx() )                            
-        .add( "thread_id", formatter::tag::thread_id() )                // thread_id tag
-        .add( "fileline", formatter::tag::file_line() ) );              // file/line tag
-
-    g_l->writer().add_formatter( formatter::append_newline() );     
-
-    g_l->writer().add_destination( 
-        destination::named("+cout out -debug")
-            .add( "cout", destination::cout())
-            .add( "debug", destination::dbg_window() )
-            .add( "out", destination::file("out.txt"))
-         );
+    g_l->writer().add_formatter( formatter::idx(), "[%] "  );
+    g_l->writer().add_formatter( formatter::append_newline_if_needed() );
+    g_l->writer().add_destination( destination::file("out.txt") );
+    g_l->writer().add_destination( destination::cout() );
+    g_l->writer().add_destination( destination::dbg_window() );
+
     g_l->turn_cache_off();
 
     // Step 8: use it...
     int i = 1;
-
-    switch ( i) {
-        case 0:L_ << "this is so cool " << i++; break;
-        case 1:L_ << "this is so cool " << i++; break;
-    }
     L_ << "this is so cool " << i++;
-  //  L_ << "this is so cool again " << i++;
+    L_ << "this is so cool again " << i++;
+
+    std::string hello = "hello", world = "world";
+    L_ << hello << ", " << world;
+
+    g_log_filter->set_enabled(false);
+    L_ << "this will not be written to the log";
+    L_ << "this won't be written to the log";
+
+    g_log_filter->set_enabled(true);
+    L_ << "good to be back ;) " << i++;
+
     // Step 9 : Enjoy!
 }
 
@@ -105,7 +95,7 @@
 
 
 int main() {
-    using_tags_example();
+    one_logger_one_filter_example();
 }
 
 
Modified: sandbox/logging/lib/logging/tests/test_rolling_file/test.cpp
==============================================================================
--- sandbox/logging/lib/logging/tests/test_rolling_file/test.cpp	(original)
+++ sandbox/logging/lib/logging/tests/test_rolling_file/test.cpp	2008-01-12 11:28:04 EST (Sat, 12 Jan 2008)
@@ -1,13 +1,227 @@
 /* 
     Tests rolling file
+    - tests writing to a clean rolling file
+    - tests writing to a rolling file that has been partially written to
+    - tests writing to a rolling file that is full (that is, all its files are fully written to)
+      thus, we should start writing from the first file
 */
 
-#include <boost/logging/logging.hpp>
+#include <boost/logging/format.hpp>
+#include <boost/logging/writer/ts_write.hpp>
+#include <boost/logging/format/destination/rolling_file.hpp>
+
+#include <boost/filesystem/path.hpp>
+#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/convenience.hpp>
+namespace fs = boost::filesystem;
+
+using namespace boost::logging;
+
+typedef logger_format_write< > log_type;
+
+BOOST_DEFINE_LOG_FILTER(g_log_filter, filter::no_ts ) 
+BOOST_DEFINE_LOG(g_l, log_type)
+
+#define L_ BOOST_LOG_USE_LOG_IF_FILTER(g_l, g_log_filter->is_enabled() ) 
+
+// whatever we log to the rolling file, we log here too (easy was to find out all the info that was logged)
+std::stringstream g_stringstream;
+
+// keeps all we log to the rolling file, after all its files are full
+std::stringstream g_after_full;
+
+// when emulating writing to a log file - each block is the equivalent of a file from the rolling file
+std::vector<std::string> g_blocks;
+
+const int MAX_SIZE_PER_FILE = 1024 + 512;
+const int FILE_COUNT = 5;
+
+const char NEXT_LINE = '\n';
+
+void init_logs() {
+    g_l->writer().add_destination( 
+        destination::rolling_file("out.txt", 
+            destination::rolling_file_settings()
+                .initial_erase(true)
+                .max_size_bytes( MAX_SIZE_PER_FILE)
+                .file_count( FILE_COUNT)
+                .flush_each_time(true)
+                .extra_flags(std::ios_base::binary)
+            ));
+    g_l->writer().add_formatter( formatter::idx(), "[%] "  );
+    g_l->writer().add_destination( destination::stream(g_stringstream) );
+    g_l->writer().add_destination( destination::cout() );
+    g_l->turn_cache_off();
+}
+
+void write_to_clean_rolling_file() {
+    // read this .cpp file - every other line is logged (odd lines)
+    std::ifstream in("test.cpp");
+    bool enabled = true;
+    std::string line;
+    while ( std::getline(in, line) ) {
+        g_log_filter->set_enabled(enabled);
+        L_ << "line odd " << line << NEXT_LINE;
+        enabled = !enabled;
+    }
+    g_log_filter->set_enabled(true);
+}
+
+void write_to_existing_rolling_file() { 
+    g_l->writer().del_destination( destination::rolling_file("out.txt") );
+    g_l->writer().add_destination( 
+        destination::rolling_file("out.txt", 
+            destination::rolling_file_settings()
+                .initial_erase(false)
+                .max_size_bytes( MAX_SIZE_PER_FILE)
+                .file_count( FILE_COUNT)
+                .flush_each_time(true)
+                .extra_flags(std::ios_base::binary)
+            ));
+
+    // read this .cpp file - every other line is logged (even lines now)
+    std::ifstream in("test.cpp");
+    bool enabled = false;
+    std::string line;
+    while ( std::getline(in, line) ) {
+        g_log_filter->set_enabled(enabled);
+        L_ << "line even " << line << NEXT_LINE;
+        enabled = !enabled;
+    }
+    g_log_filter->set_enabled(true);
+}
+
+// a bit of white-box testing - we need to know the file names - when dealing with a rolling file
+std::string file_name(const std::string & name_prefix, int idx) {
+    std::ostringstream out; 
+    if ( idx > 0)
+        out << name_prefix << "." << (idx+1);
+    else
+        out << name_prefix;
+    return out.str();
+}
+
+void test_contents() {
+    // now, read each file and see if it matches the blocks
+    for ( int idx = 0; idx < FILE_COUNT; ++idx) {
+        std::ifstream cur_file( file_name("out.txt", idx).c_str() , std::ios_base::in | std::ios_base::binary );
+        std::ostringstream out; 
+        out << cur_file.rdbuf();
+        std::string cur_file_contents = out.str();
+        std::string & cur_block = g_blocks[idx];
+        BOOST_ASSERT( cur_file_contents == cur_block);
+    }
+}
+
+void test_contents_after_write_to_existing_rolling_file() { 
+    //
+    // at this point, we've rolled over - that is, some of the very old contents have been overwritten
+    
+    // we've also written to a stream, to get the contents as they would have been written, if we hadn't rolled over
+    std::string all_contents = g_stringstream.str();
+    std::istringstream in(all_contents);
+
+    // now, we emulate writing to a rolled file - but we do it in memory
+    g_blocks.resize( FILE_COUNT);
+    int cur_block = 0;
+
+    std::string line;
+    while ( std::getline(in, line, NEXT_LINE) ) {
+        g_blocks[cur_block] += line + NEXT_LINE;
+
+        if ( g_blocks[cur_block].size() > MAX_SIZE_PER_FILE) {
+            cur_block = (cur_block + 1) % FILE_COUNT;
+            if ( g_blocks[cur_block].size() > MAX_SIZE_PER_FILE)
+                // we've rolled to a new file - clear it first
+                g_blocks[cur_block].clear();
+        }
+    }
+
+    // now, read each file and see if it matches the blocks
+    for ( int idx = 0; idx < FILE_COUNT; ++idx) {
+        std::ifstream cur_file( file_name("out.txt", idx).c_str() , std::ios_base::in | std::ios_base::binary );
+        std::ostringstream out; 
+        out << cur_file.rdbuf();
+        std::string cur_file_contents = out.str();
+        std::string & cur_block = g_blocks[idx];
+        BOOST_ASSERT( cur_file_contents == cur_block);
+    }
+}
+
+void write_to_too_full_rolling_file() { 
+    // make sure all files are too full to be appended to
+    for ( int idx = 0; idx < FILE_COUNT; ++idx) {
+        std::string cur_file_name = file_name("out.txt", idx);
+        std::ofstream cur_file( cur_file_name.c_str() , std::ios_base::out | std::ios_base::app | std::ios_base::binary );
+        int file_size = (int)fs::file_size( cur_file_name);
+        if ( file_size < MAX_SIZE_PER_FILE) {
+            std::string dummy(MAX_SIZE_PER_FILE, ' ');
+            g_blocks[idx] += dummy;
+            cur_file.write( dummy.c_str(), (std::streamsize)dummy.size() );
+        }
+    }
+
+    // right now, we know for sure that all files are too big - thus, when logging, we should end up writing to first file first
+    g_l->writer().del_destination( destination::rolling_file("out.txt") );
+    g_l->writer().add_destination( 
+        destination::rolling_file("out.txt", 
+            destination::rolling_file_settings()
+                .initial_erase(false)
+                .max_size_bytes( MAX_SIZE_PER_FILE)
+                .file_count( FILE_COUNT)
+                .flush_each_time(true)
+                .extra_flags(std::ios_base::binary)
+            ));
+    // remember what's written starting now
+    g_l->writer().add_destination( destination::stream(g_after_full) );
+
+    //
+    // and right now, do some logging
+
+    // read this .cpp file - every Xth line is written
+    const int LINE_PERIOD = 6;
+    std::ifstream in("test.cpp");
+    int line_idx = 0;
+    std::string line;
+    while ( std::getline(in, line) ) {
+        if ( (line_idx % LINE_PERIOD) == 0)
+            L_ << "new line " << line << NEXT_LINE;
+        ++line_idx;
+    }
+
+}
+void test_contents_after_writing_to_full_rolling_file() { 
+    std::string last_contents = g_after_full.str();
+    std::istringstream in(last_contents);
+
+    // emulate writing to the rolling file, knowing that we should start writing to the first file from the rolling file
+    int cur_block = 0;
+    // first time we write, we clear the first file
+    g_blocks[0].clear();
+
+    std::string line;
+    while ( std::getline(in, line, NEXT_LINE) ) {
+        g_blocks[cur_block] += line + NEXT_LINE;
+
+        if ( g_blocks[cur_block].size() > MAX_SIZE_PER_FILE) {
+            cur_block = (cur_block + 1) % FILE_COUNT;
+            if ( g_blocks[cur_block].size() > MAX_SIZE_PER_FILE)
+                // we've rolled to a new file - clear it first
+                g_blocks[cur_block].clear();
+        }
+    }
+
+    test_contents();
+}
+
 
 int main() {
+    fs::path::default_name_check( fs::no_check);
+
+    init_logs();
     write_to_clean_rolling_file();
     write_to_existing_rolling_file();
-    test_contents();
+    test_contents_after_write_to_existing_rolling_file();
     write_to_too_full_rolling_file();
     test_contents_after_writing_to_full_rolling_file();
 }
Deleted: sandbox/logging/lib/logging/tests/test_rolling_file/test.sln
==============================================================================
--- sandbox/logging/lib/logging/tests/test_rolling_file/test.sln	2008-01-12 11:28:04 EST (Sat, 12 Jan 2008)
+++ (empty file)
@@ -1,20 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test", "test.vcproj", "{C5897099-5FA2-4E12-AFFC-2015364347FA}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Release|Win32 = Release|Win32
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{C5897099-5FA2-4E12-AFFC-2015364347FA}.Debug|Win32.ActiveCfg = Debug|Win32
-		{C5897099-5FA2-4E12-AFFC-2015364347FA}.Debug|Win32.Build.0 = Debug|Win32
-		{C5897099-5FA2-4E12-AFFC-2015364347FA}.Release|Win32.ActiveCfg = Release|Win32
-		{C5897099-5FA2-4E12-AFFC-2015364347FA}.Release|Win32.Build.0 = Release|Win32
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
Modified: sandbox/logging/lib/logging/tests/test_rolling_file/test.vcproj
==============================================================================
--- sandbox/logging/lib/logging/tests/test_rolling_file/test.vcproj	(original)
+++ sandbox/logging/lib/logging/tests/test_rolling_file/test.vcproj	2008-01-12 11:28:04 EST (Sat, 12 Jan 2008)
@@ -2,7 +2,7 @@
 <VisualStudioProject
         ProjectType="Visual C++"
         Version="8.00"
-	Name="test"
+	Name="test_rolling_file"
         ProjectGUID="{C5897099-5FA2-4E12-AFFC-2015364347FA}"
         RootNamespace="test"
         Keyword="Win32Proj"
@@ -20,7 +20,7 @@
                         OutputDirectory="$(SolutionDir)$(ConfigurationName)"
                         IntermediateDirectory="$(ConfigurationName)"
                         ConfigurationType="1"
-			CharacterSet="1"
+			CharacterSet="2"
 			>
                         <Tool
                                 Name="VCPreBuildEventTool"
@@ -62,7 +62,7 @@
                         <Tool
                                 Name="VCLinkerTool"
                                 LinkIncremental="2"
-				AdditionalLibraryDirectories="D:\boosts\boost_1_33_1\bin\boost\libs\thread\build\libboost_thread.lib\vc-8_0\debug\threading-multi"
+				AdditionalLibraryDirectories="D:\boosts\boost_1_33_1\bin\boost\libs\thread\build\libboost_thread.lib\vc-8_0\debug\threading-multi;D:\boosts\boost_1_33_1\bin\boost\libs\filesystem\build\libboost_filesystem.lib\vc-8_0\debug\threading-multi"
                                 GenerateDebugInformation="true"
                                 SubSystem="1"
                                 TargetMachine="1"
Added: sandbox/logging/lib/logging/tests/test_rolling_file/test_rolling_file.sln
==============================================================================
--- (empty file)
+++ sandbox/logging/lib/logging/tests/test_rolling_file/test_rolling_file.sln	2008-01-12 11:28:04 EST (Sat, 12 Jan 2008)
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test", "test.vcproj", "{C5897099-5FA2-4E12-AFFC-2015364347FA}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{C5897099-5FA2-4E12-AFFC-2015364347FA}.Debug|Win32.ActiveCfg = Debug|Win32
+		{C5897099-5FA2-4E12-AFFC-2015364347FA}.Debug|Win32.Build.0 = Debug|Win32
+		{C5897099-5FA2-4E12-AFFC-2015364347FA}.Release|Win32.ActiveCfg = Release|Win32
+		{C5897099-5FA2-4E12-AFFC-2015364347FA}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal