Commits

Volodymyr Shamray  committed 7ac848c Merge

default=>stable

  • Participants
  • Parent commits ab7ae56, ffd5a8a

Comments (0)

Files changed (93)

 a74204c4cdb20716ef5ff835b05f5b0ee097e9b8 0.3.6
 e6e786ba69cc1250cd633641c7802b78259afde4 0.3.7
 5e4d2e34646eabee71012640099051a8dc8e725b 0.3.8
+ab7ae56d2c1329dfd41c51e10c1ea4eedb77d1fe 0.3.9
---------------------------------
+----------------------------------------------------------------
 Plog
---------------------------------
+----------------------------------------------------------------
 BUILD SYSTEM REQUIREMENTS
 
-	-Microsoft Visual Studio 2008 SP1
-	-Boost 1.40 or greater (Boost.Test library is required to be built)
-	
---------------------------------
+    - Microsoft Visual Studio 2008 SP1
+    - Boost 1.48 or greater (Boost.Test library is required to 
+      be built)
+
+----------------------------------------------------------------
 ENVIRONMENTAL VARIABLES:
 
-	BOOST_1_40_0       = path to the Boost root directory. Boost header files must be located at path %BOOST_1_40_0%\boost
-	BOOST_LIB32_1_40_0 = path to 32-bit Boost libraries
-	BOOST_LIB64_1_40_0 = path to 64-bit Boost libraries
-	
---------------------------------
+    BOOST_1_48_0       = path to the Boost root directory. Boost 
+                         header files must be located at path 
+                         %BOOST_1_48_0%\boost
+    BOOST_LIB32_1_48_0 = path to 32-bit Boost libraries
+    BOOST_LIB64_1_48_0 = path to 64-bit Boost libraries
+
+----------------------------------------------------------------
 COMMANDS FOR BUILD:
-	"%VS90COMNTOOLS%..\IDE\devenv.com" plog.sln /build "release|Win32"
-	"%VS90COMNTOOLS%..\IDE\devenv.com" plog.sln /build "debug|Win32"
-	"%VS90COMNTOOLS%..\IDE\devenv.com" plog.sln /build "release|x64"
-	"%VS90COMNTOOLS%..\IDE\devenv.com" plog.sln /build "debug|x64"
+    "%VS90COMNTOOLS%..\IDE\devenv.com" plog.sln /build "release|Win32"
+    "%VS90COMNTOOLS%..\IDE\devenv.com" plog.sln /build "debug|Win32"
+    "%VS90COMNTOOLS%..\IDE\devenv.com" plog.sln /build "release|x64"
+    "%VS90COMNTOOLS%..\IDE\devenv.com" plog.sln /build "debug|x64"
 
-	You can use build.bat to build plog in all configurations
-	You also can use clean.cmd to clean up the source directories
+    You can use build.bat to build plog in all configurations
+    You also can use clean.cmd to clean up the source directories
 
---------------------------------
+----------------------------------------------------------------
 BUILD ARTIFACTS:
-	
-	Built binary libraries will be palced in '.\lib' directory. 
+
+    Built binary libraries will be palced in '.\lib' directory. 
 
 	
 Podobry C++ Log
-================================
+----------------------------------------------------------------
 
 LICENSE:
 
-	Library distributed under terms of MIT license. License agreement can be found in file LICENSE
+    Library distributed under terms of MIT license. License 
+    agreement can be found in file LICENSE
 
-================================
+----------------------------------------------------------------
 
 BUILD:
-	To build project of the log itself you do not need any third party libraries.
-	To build unit-tests and auto-test you need boost. Path to the directory of the boost must be specified in environmental variable %BOOST_1_40_0%
 
-================================
+    To build the log itself you don't need any third party 
+    libraries.
+
+	To build unit tests and auto test you need Boost. Path to 
+    the BOOST directory must be specified in environment 
+    variable %BOOST_1_48_0%, and boost library directories must 
+    be specified in BOOST_LIB32_1_48_0 and BOOST_LIB64_1_48_0
+    variables for 32-bit and 64-bit libraries respectively.
+
+----------------------------------------------------------------
 
 USAGE:
-	Example of the log usage can be found in project 'example'
+
+    Example of the log usage can be found in project 'example'

File boost-env-check.bat

+@echo off
+
+if "%BOOST_1_48_0%" == "" goto err
+if "%BOOST_LIB32_1_48_0%" == "" goto err
+if "%BOOST_LIB64_1_48_0%" == "" goto err
+
+exit 0
+
+:err
+echo Boost environment variables are not set
+exit 1
+
+
+

File build-vs08.bat

-"%VS90COMNTOOLS%..\IDE\devenv.com" plog-vs08.sln /build "release|Win32"
-"%VS90COMNTOOLS%..\IDE\devenv.com" plog-vs08.sln /build "debug|Win32"
-"%VS90COMNTOOLS%..\IDE\devenv.com" plog-vs08.sln /build "release|x64"
-"%VS90COMNTOOLS%..\IDE\devenv.com" plog-vs08.sln /build "debug|x64"
+@echo off
+"%VS90COMNTOOLS%..\IDE\devenv.com" plog-vs08.sln /build "Debug|Win32"
+"%VS90COMNTOOLS%..\IDE\devenv.com" plog-vs08.sln /build "Release|Win32"
+"%VS90COMNTOOLS%..\IDE\devenv.com" plog-vs08.sln /build "Debug|x64"
+"%VS90COMNTOOLS%..\IDE\devenv.com" plog-vs08.sln /build "Release|x64"

File build-vs10.bat

-"%VS100COMNTOOLS%..\IDE\devenv.com" plog-vs10.sln /build "release|Win32"
-"%VS100COMNTOOLS%..\IDE\devenv.com" plog-vs10.sln /build "debug|Win32"
-"%VS100COMNTOOLS%..\IDE\devenv.com" plog-vs10.sln /build "release|x64"
-"%VS100COMNTOOLS%..\IDE\devenv.com" plog-vs10.sln /build "debug|x64"
+@echo off
+"%VS100COMNTOOLS%..\IDE\devenv.com" plog-vs10.sln /build "Debug|Win32"
+"%VS100COMNTOOLS%..\IDE\devenv.com" plog-vs10.sln /build "Release|Win32"
+"%VS100COMNTOOLS%..\IDE\devenv.com" plog-vs10.sln /build "Debug|x64"
+"%VS100COMNTOOLS%..\IDE\devenv.com" plog-vs10.sln /build "Release|x64"
+    @echo off
+
+    if "%1"=="vs2008" goto build_vs2008
+    if "%1"=="vs2010" goto build_vs2010
+
+:: BUILD ALL
+    call build-vs08.bat
+    call build-vs10.bat
+
+    goto :eof
+
+:: BUILD VS 2008 ONLY
+:build_vs2008
+    call build-vs08.bat
+    goto :eof
+
+:: BUILD VS 2008 ONLY
+:build_vs2010
+    call build-vs10.bat
+    goto :eof
+@echo off
+
+setlocal enableextensions
+setlocal enabledelayedexpansion
+
+title cleanig all...
+
+cls
+
+echo cleaning all...
+echo.
+
+echo ..deleting *.ncb
+if exist *.ncb del /s /q /f /as /ah /ar /aa *.ncb
+echo.
+
+echo ..deleting *.suo
+if exist *.suo del /s /q /f /as /ah /ar /aa *.suo
+echo.
+
+echo ..deleting binaries
+if exist .\bin rd /s /q .\bin
+echo.
+
+echo ..deleting static libraries and generated source files
+if exist .\lib rd  /s /q .\lib
+echo.
+
+echo ..deleting object files and other intermediate build results
+if exist .\obj rd /s /q .\obj
+echo.
+
+echo ..cleaning up sources
+for /f "delims=" %%d in ('dir /ad /b /s .\') do call:clean_up_source_directory "%%d"
+echo.
+
+echo ..changing files attributes
+attrib -r -a -s -h *.* /s
+echo.
+
+goto end_of_script
+
+:: subroutines
+:clean_up_source_directory
+echo ..cleaning up source directory %1
+if exist %1\*.user del /s /q /f /as /ah /ar /aa %1\*.user
+echo.
+exit /b
+
+:end_of_script

File clean.cmd

-@echo off
-
-setlocal enableextensions
-setlocal enabledelayedexpansion
-
-title cleanig all...
-
-cls
-
-echo cleaning all...
-echo.
-
-echo ..deleting *.ncb
-if exist *.ncb del /s /q /f /as /ah /ar /aa *.ncb
-echo.
-
-echo ..deleting *.suo
-if exist *.suo del /s /q /f /as /ah /ar /aa *.suo
-echo.
-
-echo ..deleting binaries
-if exist .\bin rd /s /q .\bin
-echo.
-
-echo ..deleting static libraries and generated source files
-if exist .\lib rd  /s /q .\lib
-echo.
-
-echo ..deleting object files and other intermediate build results
-if exist .\obj rd /s /q .\obj
-echo.
-
-echo ..cleaning up sources
-for /f "delims=" %%d in ('dir /ad /b /s .\') do call:clean_up_source_directory "%%d"
-echo.
-
-echo ..changing files attributes
-attrib -r -a -s -h *.* /s
-echo.
-
-goto end_of_script
-
-:: subroutines
-:clean_up_source_directory
-echo ..cleaning up source directory %1
-if exist %1\*.user del /s /q /f /as /ah /ar /aa %1\*.user
-echo.
-exit /b
-
-:end_of_script

File include/plog/appender.h

     virtual ~appender();
 
     virtual void write(const void* buffer, size_t length);
-    virtual bool newly_created();
+    virtual void write_header(const void* buffer, size_t length);
 
     void set_level(log_level min_severity);
     log_level get_level() const;

File include/plog/cfq_appender.h

+#ifndef CFQ_APPENDER_H
+#define CFQ_APPENDER_H
+
+#include <string>
+#include <vector>
+
+#include "plog/file_appender.h"
+
+namespace plog
+{
+    
+    //////////////////////////////////////////////////////////////////////////
+
+    // Circular File Queue (CFQ) appender
+
+    // CFQ is a set of files of limited size. There are two limits - maximum
+    // file size and maximum number of files. When file size reaches its limit 
+    // , appender starts writing into the next file. When file number reaches 
+    // its limit, appender deletes the oldest file before starting to write to
+    // the newest one.
+
+    class cfq_appender: public appender
+    {
+    public:
+        cfq_appender(log_level min_severity = none, 
+            size_t max_file_size = 10 * 1024 * 1024, 
+            size_t max_files = 2);
+
+        cfq_appender(const wchar_t* file_name_base, 
+            const wchar_t* file_extension,
+            size_t max_file_size, 
+            size_t max_files,
+            log_level min_severity = none);
+
+        void init(const wchar_t* file_name_base, const wchar_t* file_extension);
+
+        void write(const void* buffer, size_t length);
+        void write_header(const void* buffer, size_t length);
+
+    private:
+        void start_new_file();
+        void continue_file();
+        void write_header();
+
+    private:
+        std::wstring file_name_base_;
+        std::wstring file_extension_;
+        size_t file_index_;
+        size_t file_count_;
+        size_t max_file_size_;
+        size_t max_files_;
+        file_appender file_appender_;
+        std::vector<char> header_;
+    };
+
+    //////////////////////////////////////////////////////////////////////////
+
+    namespace detail
+    {
+        void format_file_name(const std::wstring& base, 
+            const std::wstring& extension, 
+            size_t number, 
+            std::wstring* file_name);
+    }
+}
+
+#endif

File include/plog/config.h

-#ifndef PLOG_CONFIG_H_
-#define PLOG_CONFIG_H_
+#ifndef PLOG_CONFIG_H
+#define PLOG_CONFIG_H
 
 #ifdef _MSC_BUILD
     #ifdef _M_AMD64
         #define PLOG_BUILD_CONFIGURATION "Release"
     #endif
 
-    #if (_MSC_VER == 1600)
+    #if (_MSC_VER == 1700)
+        #define PLOG_BUILD_ENVIRONMENT "vs2012"
+    #elif (_MSC_VER == 1600)
         #define PLOG_BUILD_ENVIRONMENT "vs2010"
     #elif (_MSC_VER == 1500)
         #define PLOG_BUILD_ENVIRONMENT "vs2008"
     #pragma comment( lib, "plog-" PLOG_BUILD_ENVIRONMENT "-" PLOG_BUILD_CONFIGURATION "-" PLOG_BUILD_ARCHITECTURE ".lib" )
 #endif // _MSC_BUILD
 
-#endif //PLOG_CONFIG_H_
+#endif //PLOG_CONFIG_H

File include/plog/csv_formatter.h

File contents unchanged.

File include/plog/custom_log_proxy_logger.h

File contents unchanged.

File include/plog/debug_output_appender.h

 
     //////////////////////////////////////////////////////////////////////////
 
-    class debug_output_appender : public appender
+    class debug_output_appender: public appender
     {
     public:
         debug_output_appender(log_level min_severity = none);
 
         virtual void write(const void* buffer, size_t length);
-        virtual bool newly_created();
+        virtual void write_header(const void* buffer, size_t length);
     };
 
 } //namespace

File include/plog/file_appender.h

 
 namespace plog
 {
+    //////////////////////////////////////////////////////////////////////////
 
-//////////////////////////////////////////////////////////////////////////
+    class file_appender: public appender
+    {
+    public:
+        file_appender(log_level min_severity = none);
+        file_appender(const wchar_t* file_name, bool rewrite_file, log_level min_severity = none);
 
-class file_appender : public appender
-{
-public:
-    file_appender(log_level min_severity = none);
-    file_appender(const wchar_t* file_name, bool rewrite_file, log_level min_severity = none);
+        void init(const wchar_t* file_name, bool rewrite_file);
 
-    void init(const wchar_t* file_name, bool rewrite_file);
-    virtual void write(const void* buffer, size_t length);
-    virtual bool newly_created();
+        void write(const void* buffer, size_t length);
+        void write_header(const void* buffer, size_t length);
 
-private:
-    bool is_file_deleted();
-    void reinitialize_file();
+        size_t file_size();
 
-private:
-    ATL::CAtlFile file_;
-    bool rewritten_;
-    std::wstring file_name_;
-};
+    private:
+        bool is_file_deleted();
+        void reinitialize_file();
+
+    private:
+        ATL::CAtlFile file_;
+        bool rewritten_;
+        std::wstring file_name_;
+    };
 
 } //namespace
 
-#endif
+#endif

File include/plog/formatter.h

File contents unchanged.

File include/plog/init.h

     };
 
     void init(std::auto_ptr<initializer> li);//may throw
-    void init(const wchar_t* filename, const log_level level, bool rewrite_file = false);
+    
+    void init(const wchar_t* filename, 
+        const log_level level, 
+        bool rewrite_file = false);
+
+    void init(const wchar_t* filename, 
+        const log_level level, 
+        size_t max_file_size, 
+        size_t max_files);
     
     void init_csv(const wchar_t* filename, const log_level level, bool rewrite_file = false);
+    void init_csv(const wchar_t* filename, const log_level level, size_t max_file_size, size_t max_files);
     void init_txt(const wchar_t* filename, const log_level level, bool rewrite_file = false);
+    void init_txt(const wchar_t* filename, const log_level level, size_t max_file_size, size_t max_files);
+
     void init_ostream(std::ostream& stream, const log_level level, plog::formatter* fmtr = NULL);
     void init_cerr(const log_level level);
     void init_debug(const log_level level);
     void init_custom_log(custom_log* log);
 
     void free(bool free_resources = true);
+
+    namespace detail
+    {
+        void parse_file_name(const wchar_t* filename, std::wstring& base, std::wstring& extension);
+        bool is_csv(const wchar_t* filename);
+    }
 }
 
 #endif

File include/plog/log.h

 #define LOG(severity) \
     PLOG_RETRIEVE_OBJ(PLOG_THIS)\
     if (plog::logger_holder::get_logger())\
-    *(plog::logger_holder::get_logger()) += plog::message(severity, CONTEXT_INFO(PLOG_THIS))
+    *(plog::logger_holder::get_logger()) += plog::message(severity, CONTEXT_INFO(PLOG_THIS), plog::logger_holder::get_logger()->get_locale())
 
 #define LOG_IF(severity, condition) \
     PLOG_RETRIEVE_OBJ(PLOG_THIS)\
     if (condition && plog::logger_holder::get_logger())\
-    *(plog::logger_holder::get_logger()) += plog::message(severity, CONTEXT_INFO(PLOG_THIS))
+    *(plog::logger_holder::get_logger()) += plog::message(severity, CONTEXT_INFO(PLOG_THIS), plog::logger_holder::get_logger()->get_locale())
 
 #define LOG_EVERY_N(severity, n) \
     static int PLOG_COUNTER = 0; \

File include/plog/log_level.h

     info    = 4,
     debug   = 5,
     trace   = 6,
-    maximum_log_level = debug + 1
+    maximum_log_level = trace + 1
 };
 
 inline const char* level_name(log_level level)

File include/plog/log_message.h

 #ifndef PLOG_LOG_MESSAGE_H
 #define PLOG_LOG_MESSAGE_H
 
-#include <sstream>
 #include <ctime>
 #include <locale>
 
 #include <windows.h>
+
+#include "plog/log_message_stream.h"
 #include "plog/log_level.h"
 #include "plog/context_info.h"
 
         friend bool operator==(const message& msg1, const message& msg2);
 
     public:
-        message(log_level severity, const context_info& context, const char* message = "")
-            : locale_("")
-            , severity_(severity)
-            , stream_(message)
+        message(log_level severity, const context_info& context, const std::locale& loc, const char* message = "")
+            : severity_(severity)
+            , stream_(loc, message)
             , context_(context)
         {
         }
 
+        ~message()
+        {
+
+        }
+
         template<typename T>
         message& operator<< (const T& chunk)
         {
             return *this;
         }
 
-        message& operator<< (const char* chunk)
-        {
-            chunk = chunk ? chunk : "(null)";
-
-            stream_ << chunk;
-            return *this;
-        }
-
-        message& operator<< (char* chunk)
-        {
-            return operator<< <const char*> (static_cast<const char*>(chunk));
-        }
-
-        message& operator<< (const wchar_t* chunk)
-        {
-            chunk = chunk ? chunk : L"(null)";
-
-            for(; *chunk; ++chunk)
-                stream_ << std::use_facet< std::ctype<wchar_t> >(locale_).narrow(*chunk, '?');
-            return *this;
-        }
-
-        message& operator<< (wchar_t* chunk)
-        {
-            return operator<< (static_cast<const wchar_t*>(chunk));
-        }
-
-        message& operator<< (const std::string& chunk)
-        {
-            stream_ << chunk.c_str();
-            return *this;
-        }
-
-        message& operator<< (const std::wstring& chunk)
-        {
-            *this << chunk.c_str();
-            return *this;
-        }
-
-        message& operator << (const message& msg)
-        {
-            stream_ << msg.stream_.str().c_str();
-
-            locale_ = msg.locale_;
-            severity_ = msg.severity_;
-            context_ = msg.context_;
-
-            return *this;
-        }
-
         std::string text() const
         {
             return stream_.str();
         }
 
+        const char* first() const
+        {
+            return stream_.first();
+        }
+
+        const char* last() const
+        {
+            return stream_.last();
+        }
+
+        size_t size() const
+        {
+            return stream_.size();
+        }
+
         const char* severity_name() const
         {
             return level_name(severity_);
         }
 
     private:
-        std::locale locale_;
-        std::stringstream stream_;
+        message_stream stream_;
         log_level severity_;
         context_info context_;
     };
     }
 }
 
-
-
 #endif

File include/plog/log_message_stream.h

+#ifndef PLOG_LOG_MESSAGE_STREAM_H
+#define PLOG_LOG_MESSAGE_STREAM_H
+
+#include <iostream>
+
+namespace plog
+{
+    class msg_writer
+    {
+    public:
+        virtual ~msg_writer(){}
+        virtual std::ostream& operator() (std::ostream& os) const = 0;
+    };
+
+    inline void hex_write_byte(std::ostream& os, unsigned char b)
+    {
+        const char* hexbytes[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"};
+        os << (hexbytes[b >> 4]) << (hexbytes[b & 0x0F]);
+    }
+
+    template <typename T>
+    class hex_writer: public msg_writer
+    {
+    public:
+        hex_writer(T value)
+            : value_(value)
+        {
+        }
+
+        std::ostream& operator() (std::ostream& os) const
+        {
+            const unsigned char* buffer = reinterpret_cast<const unsigned char*>(&value_);
+            for (size_t i = sizeof(T); i != 0; --i)
+            {
+                hex_write_byte(os, buffer[i-1]);
+            }
+            return os;
+        }
+
+    private:
+        T value_;
+    };
+
+    class message_buffer: public std::streambuf
+    {
+        const static size_t BUF_SIZE = 512;
+    public:
+        message_buffer()
+            : position_(0)
+        {
+            setp(buffer_, buffer_ + BUF_SIZE);
+        }
+
+        const char* first() const
+        {
+            return pbase();
+        }
+
+        const char* last() const
+        {
+            return pptr();
+        }
+
+    private:
+        char buffer_[BUF_SIZE];
+        size_t position_;
+    };
+
+    class message_stream: public std::ostream
+    {
+        friend inline message_stream& operator<< (message_stream& out, const wchar_t* chunk);
+        friend message_stream& operator<< (message_stream& out, const std::wstring& chunk);
+
+    public:
+        message_stream(const std::locale& loc, const char* s = "")
+            : std::ostream(&buf_)
+            , locale_(loc)
+        {
+            *this << s;
+        }
+
+        std::string str() const
+        {
+            return std::string(first(), last());
+        }
+
+        const char* first() const
+        {
+            return buf_.first();
+        }
+
+        const char* last() const
+        {
+            return buf_.last();
+        }
+
+        size_t size() const
+        {
+            return last() - first();
+        }
+
+    private:
+        message_buffer buf_;
+        const std::locale& locale_;
+    };
+
+    template<typename T>
+    inline message_stream& operator<< (message_stream& out, const hex_writer<T>& mw)
+    {
+        mw(out);
+        return out;
+    }
+
+    inline char make_readable(char c)
+    {
+        if (c < ' ' && c != '\t' && c != '\r' && c != '\n')
+            return '?';
+        else
+            return c;
+    }
+
+    inline char narrow(const std::locale& loc, wchar_t c)
+    {
+        return make_readable(std::use_facet< std::ctype<wchar_t> >(loc).narrow(c, '?'));
+    }
+
+    inline message_stream& operator<< (message_stream& out, const wchar_t* chunk)
+    {
+        for(; *chunk; ++chunk)
+        {
+            out << narrow(out.locale_, *chunk);
+        }
+        return out;
+    }
+
+    inline message_stream& operator<< (message_stream& out, const std::wstring& chunk)
+    {
+        for(size_t i = 0; i < chunk.size(); ++i)
+        {
+            out << narrow(out.locale_, chunk[i]);
+        }
+        return out;
+    }
+
+    inline message_stream& operator<< (message_stream& out, const char* chunk)
+    {
+        for(; *chunk; ++chunk)
+        {
+            out << make_readable(*chunk);
+        }
+        return out;
+    }
+
+    inline message_stream& operator<< (message_stream& out, const std::string& chunk)
+    {
+        for(size_t i = 0; i < chunk.size(); ++i)
+        {
+            out << make_readable(chunk[i]);
+        }
+        return out;
+    }
+
+    template <typename T> 
+    inline hex_writer<T> hexdmp(T decimal)
+    {
+        return hex_writer<T>(decimal);
+    }
+}
+
+#endif

File include/plog/logger.h

-#ifndef PLOG_LOGGER_H_
-#define PLOG_LOGGER_H_
+#ifndef PLOG_LOGGER_H
+#define PLOG_LOGGER_H
+
+#include <locale>
 
 namespace plog
 {
     class logger
     {   
     public:
+        logger();
+
         virtual void write(const message& msg) = 0;
         virtual bool check_severity(log_level severity) = 0;
         virtual ~logger()
         {}
+
+        const std::locale& get_locale();
+
+    private:
+        std::locale locale_;
     };
 
-    logger& operator+=(logger& l, const message& msg);
+    logger& operator+=(logger& l,const message& msg);
 }
 
-#endif //PLOG_LOGGER_H_
+#endif //PLOG_LOGGER_H

File include/plog/logger_holder.h

-#ifndef LOG_HOLDER_H_
-#define LOG_HOLDER_H_
+#ifndef LOG_HOLDER_H
+#define LOG_HOLDER_H
 
 #include "plog/logger.h"
 
     }
 }
 
-#endif //LOG_HOLDER_H_
+#endif //LOG_HOLDER_H

File include/plog/monoappender_logger.h

-#ifndef PLOG_MONOAPPENDER_LOGGER_H_
-#define PLOG_MONOAPPENDER_LOGGER_H_
+#ifndef PLOG_MONOAPPENDER_LOGGER_H
+#define PLOG_MONOAPPENDER_LOGGER_H
 
 #include <memory>
 
 
 namespace plog
 {
-    class monoappender_logger 
-        : public logger
+    //////////////////////////////////////////////////////////////////////////
+
+    class monoappender_logger: public logger
     {
     public:
-        monoappender_logger( appender* appender_instance /*takes ownership on appender_instance*/,/* )*/
-                             formatter* formatter_instance =NULL /*takes ownership on formatter_instance*/ )
-            : appender_(appender_instance), formatter_(formatter_instance)
-        { 
-            if(   ( appender_.get() != NULL )
-                && ( appender_->newly_created() ) )
-            {
-                if (formatter_.get() == NULL)
-                {
-                    formatter_.reset(new plog::csv_formatter);
-                }
+        monoappender_logger(appender* appender_instance /*takes ownership on appender_instance*/,
+                            formatter* formatter_instance =NULL /*takes ownership on formatter_instance*/);
 
-                appender_->write( formatter_->header(), formatter_->header_size() );
-            }
-        }
-
-        ~monoappender_logger(){};
-
-        void write(const message& msg)
-        {
-            const size_t BUF_SIZE = 512;
-            char buffer[BUF_SIZE];
-
-            if( appender_.get() != NULL )
-            {
-                size_t length = formatter_->format(msg, buffer, BUF_SIZE);
-
-                appender_->write(buffer, length);
-            }
-        }
-
-        bool check_severity(log_level severity)
-        {
-            if( appender_.get() != NULL )
-            {
-                return (appender_->get_level() >= severity);
-            }
-            else
-            {
-                return false;
-            }
-        }
+        void write(const message& msg);
+        bool check_severity(log_level severity);
 
     private:
         std::auto_ptr<appender>     appender_;
         std::auto_ptr<formatter>    formatter_;
     };
+
 }
 
-#endif //PLOG_MONOAPPENDER_LOGGER_H_
+#endif //PLOG_MONOAPPENDER_LOGGER_H

File include/plog/multiappender_logger.h

 
 namespace plog
 {
+    //////////////////////////////////////////////////////////////////////////
+    // default loggers
 
-//////////////////////////////////////////////////////////////////////////
-// default loggers
+    class multiappender_logger: public logger
+    {
+    public:
+        void add_appender(appender* log_appender, formatter* log_formatter);
+        void write(const message& msg);
+        bool check_severity(log_level severity);
 
-class multiappender_logger 
-    : public logger
-{
-public:
-    multiappender_logger(){};
-    ~multiappender_logger(){};
-    
-    void add_appender(appender* log_appender, formatter* log_formatter);
-    void write(const message& msg);
-    bool check_severity(log_level severity);
 
+    private:
+        std::vector< std::pair<appender*,formatter*> > appenders_;
+    };
 
-private:
-    std::vector< std::pair<appender*,formatter*> > appenders_;
-};
-
-//////////////////////////////////////////////////////////////////////////
-
+    //////////////////////////////////////////////////////////////////////////
 }
 
-#endif
+#endif

File include/plog/ostream_appender.h

 
     //////////////////////////////////////////////////////////////////////////
 
-    class ostream_appender : public appender
+    class ostream_appender: public appender
     {
         ostream_appender& operator=(const ostream_appender&);
     public:
         ostream_appender(std::ostream& stream, log_level min_severity = none);
 
         virtual void write(const void* buffer, size_t length);
-        virtual bool newly_created();
+        virtual void write_header(const void* buffer, size_t length);
     private:
         std::ostream& stream_;
     };

File include/plog/raw_formatter.h

File contents unchanged.

File include/plog/str_utils.h

 
 namespace plog
 {
-    namespace str_utils
+    namespace detail
     {
         // returns file name (without path) from full file name
 

File include/plog/txt_formatter.h

 
 #include "plog/formatter.h"
 #include <string>
+#include <vector>
 
 namespace plog
 {
     };
 }
 
-#endif // PLOG_TXT_FORMATTER_H
+#endif // PLOG_TXT_FORMATTER_H

File include/plog/version.h

 
 //////////////////////////////////////////////////////////////////////////
 //
-// This is generated automatically. Do not modify it
+// This file is generated automatically. Do not modify it
 //
 //////////////////////////////////////////////////////////////////////////
 

File msvc/example-vs10.vcxproj.filters

+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\example\main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>

File msvc/example-vs12.vcxproj

+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{7DCB2683-9E48-4C9F-8DA1-7C6B5E052DB1}</ProjectGuid>
+    <RootNamespace>example-vs12</RootNamespace>
+    <ProjectName>example</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\plog-vs12.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\plog-vs12.props" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\plog-vs12.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\plog-vs12.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(SolutionDir)\bin\vs2010-$(Configuration)-$(PlatformName)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <OutDir>$(SolutionDir)\bin\vs2010-$(Configuration)-$(PlatformName)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <IntDir>$(SolutionDir)\obj\$(ProjectName)\vs2010-$(Configuration)-$(PlatformName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <IntDir>$(SolutionDir)\obj\$(ProjectName)\vs2010-$(Configuration)-$(PlatformName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)\bin\vs2010-$(Configuration)-$(PlatformName)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <OutDir>$(SolutionDir)\bin\vs2010-$(Configuration)-$(PlatformName)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <IntDir>$(SolutionDir)\obj\$(ProjectName)\vs2010-$(Configuration)-$(PlatformName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <IntDir>$(SolutionDir)\obj\$(ProjectName)\vs2010-$(Configuration)-$(PlatformName)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(SolutionDir)lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+    </Link>
+    <ProjectReference>
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>
+    </ProjectReference>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(SolutionDir)lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+    </Link>
+    <ProjectReference>
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>
+    </ProjectReference>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <AdditionalIncludeDirectories>$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalLibraryDirectories>$(SolutionDir)lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+    </Link>
+    <ProjectReference>
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>
+    </ProjectReference>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <AdditionalIncludeDirectories>$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalLibraryDirectories>$(SolutionDir)lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+    </Link>
+    <ProjectReference>
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>
+    </ProjectReference>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\example\main.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>

File msvc/example-vs12.vcxproj.filters

+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\example\main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>

File msvc/example_vs10.vcxproj.filters

-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="Source Files">
-      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
-      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
-    </Filter>
-    <Filter Include="Header Files">
-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
-      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="..\src\example\main.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-  </ItemGroup>
-</Project>

File msvc/plog-complex-test-vs08.vcproj

 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
 			>
 			<File
-				RelativePath="..\test\plog-complex-test\plog-complex-test.cpp"
+				RelativePath="..\test\plog-complex-test\plog_cfq_text.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\test\plog-complex-test\plog_complex_test.cpp"
 				>
 			</File>
 		</Filter>

File msvc/plog-complex-test-vs10.vcxproj

     </ProjectReference>
   </ItemDefinitionGroup>
   <ItemGroup>
-    <ClCompile Include="..\test\plog-complex-test\plog-complex-test.cpp" />
+    <ClCompile Include="..\test\plog-complex-test\plog_cfq_text.cpp" />
+    <ClCompile Include="..\test\plog-complex-test\plog_complex_test.cpp" />
   </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">

File msvc/plog-complex-test-vs10.vcxproj.filters

     </Filter>
   </ItemGroup>
   <ItemGroup>
-    <ClCompile Include="..\test\plog-complex-test\plog-complex-test.cpp">
+    <ClCompile Include="..\test\plog-complex-test\plog_cfq_text.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\test\plog-complex-test\plog_complex_test.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>

File msvc/plog-complex-test-vs12.vcxproj

+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{CA366290-6749-47EC-9DBE-001885808716}</ProjectGuid>
+    <RootNamespace>plogcomplextest-vs12</RootNamespace>
+    <ProjectName>plog-complex-test</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\plog-vs12.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\plog-vs12.props" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\plog-vs12.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\plog-vs12.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(SolutionDir)\bin\vs2010-$(Configuration)-$(PlatformName)\</OutDir>
+    <IntDir>$(SolutionDir)\obj\$(ProjectName)\vs2010-$(Configuration)-$(PlatformName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <OutDir>$(SolutionDir)\bin\vs2010-$(Configuration)-$(PlatformName)\</OutDir>
+    <IntDir>$(SolutionDir)\obj\$(ProjectName)\vs2010-$(Configuration)-$(PlatformName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)\bin\vs2010-$(Configuration)-$(PlatformName)\</OutDir>
+    <IntDir>$(SolutionDir)\obj\$(ProjectName)\vs2010-$(Configuration)-$(PlatformName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <OutDir>$(SolutionDir)\bin\vs2010-$(Configuration)-$(PlatformName)\</OutDir>
+    <IntDir>$(SolutionDir)\obj\$(ProjectName)\vs2010-$(Configuration)-$(PlatformName)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(BOOST);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(BOOST_LIB32);$(SolutionDir)lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <SubSystem>Console</SubSystem>
+    </Link>
+    <PostBuildEvent>
+      <Command>
+      </Command>
+    </PostBuildEvent>
+    <ProjectReference>
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>
+    </ProjectReference>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(BOOST);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(BOOST_LIB64);$(SolutionDir)lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <SubSystem>Console</SubSystem>
+    </Link>
+    <PostBuildEvent>
+      <Command>
+      </Command>
+    </PostBuildEvent>
+    <ProjectReference>
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>
+    </ProjectReference>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <AdditionalIncludeDirectories>$(BOOST);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalLibraryDirectories>$(BOOST_LIB32);$(SolutionDir)lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <SubSystem>Console</SubSystem>
+    </Link>
+    <PostBuildEvent>
+      <Command>
+      </Command>
+    </PostBuildEvent>
+    <ProjectReference>
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>
+    </ProjectReference>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <AdditionalIncludeDirectories>$(BOOST);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalLibraryDirectories>$(BOOST_LIB64);$(SolutionDir)lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <SubSystem>Console</SubSystem>
+    </Link>
+    <PostBuildEvent>
+      <Command>
+      </Command>
+    </PostBuildEvent>
+    <ProjectReference>
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>
+    </ProjectReference>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\test\plog-complex-test\plog_cfq_text.cpp" />
+    <ClCompile Include="..\test\plog-complex-test\plog_complex_test.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>

File msvc/plog-complex-test-vs12.vcxproj.filters

+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\test\plog-complex-test\plog_cfq_text.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\test\plog-complex-test\plog_complex_test.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>

File msvc/plog-unit-tests-vs08.vcproj

 				>
 			</File>
 			<File
+				RelativePath="..\test\plog-unit-test\initialization_utils_test.cpp"
+				>
+			</File>
+			<File
 				RelativePath="..\test\plog-unit-test\non_singleton_log_test.cpp"
 				>
 			</File>
 			Name="message"
 			>
 			<File
+				RelativePath="..\test\plog-unit-test\message_stream_test.cpp"
+				>
+			</File>
+			<File
 				RelativePath="..\test\plog-unit-test\message_test.cpp"
 				>
 			</File>
 				>
 			</File>
 		</Filter>
+		<Filter
+			Name="appenders"
+			>
+			<File
+				RelativePath="..\test\plog-unit-test\cfq_appender_test.cpp"
+				>
+			</File>
+		</Filter>
+		<File
+			RelativePath="..\test\plog-unit-test\test_utils.h"
+			>
+		</File>
 	</Files>
 	<Globals>
 	</Globals>

File msvc/plog-unit-tests-vs12.vcxproj

+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{E08C8CF7-B973-4DC1-A110-0FCEFAC2AFAB}</ProjectGuid>
+    <RootNamespace>plogunittests</RootNamespace>
+    <ProjectName>plog-unit-tests</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\plog-vs12.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\plog-vs12.props" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\plog-vs12.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\plog-vs12.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(SolutionDir)\bin\vs2010-$(Configuration)-$(PlatformName)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <OutDir>$(SolutionDir)\bin\vs2010-$(Configuration)-$(PlatformName)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <IntDir>$(SolutionDir)\obj\$(ProjectName)\vs2010-$(Configuration)-$(PlatformName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <IntDir>$(SolutionDir)\obj\$(ProjectName)\vs2010-$(Configuration)-$(PlatformName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)\bin\vs2010-$(Configuration)-$(PlatformName)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <OutDir>$(SolutionDir)\bin\vs2010-$(Configuration)-$(PlatformName)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <IntDir>$(SolutionDir)\obj\$(ProjectName)\vs2010-$(Configuration)-$(PlatformName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <IntDir>$(SolutionDir)\obj\$(ProjectName)\vs2010-$(Configuration)-$(PlatformName)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(BOOST);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(BOOST_LIB32);$(SolutionDir)lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <SubSystem>Console</SubSystem>
+    </Link>
+    <PostBuildEvent>
+      <Command>"$(TargetPath)"</Command>
+    </PostBuildEvent>
+    <ProjectReference>
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>
+    </ProjectReference>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(BOOST);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>$(BOOST_LIB64);$(SolutionDir)lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <SubSystem>Console</SubSystem>
+    </Link>
+    <PostBuildEvent>
+      <Command>"$(TargetPath)"</Command>
+    </PostBuildEvent>
+    <ProjectReference>
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>
+    </ProjectReference>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <AdditionalIncludeDirectories>$(BOOST);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalLibraryDirectories>$(BOOST_LIB32);$(SolutionDir)lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <SubSystem>Console</SubSystem>
+    </Link>
+    <PostBuildEvent>
+      <Command>"$(TargetPath)"</Command>
+    </PostBuildEvent>
+    <ProjectReference>
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>
+    </ProjectReference>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <AdditionalIncludeDirectories>$(BOOST);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalLibraryDirectories>$(BOOST_LIB64);$(SolutionDir)lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <SubSystem>Console</SubSystem>
+    </Link>
+    <PostBuildEvent>
+      <Command>"$(TargetPath)"</Command>
+    </PostBuildEvent>
+    <ProjectReference>
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>
+    </ProjectReference>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\test\plog-unit-test\csv_formatter_test.cpp" />
+    <ClCompile Include="..\test\plog-unit-test\custom_logger_test.cpp" />
+    <ClCompile Include="..\test\plog-unit-test\error_observer_test.cpp" />
+    <ClCompile Include="..\test\plog-unit-test\initialization_test.cpp" />
+    <ClCompile Include="..\test\plog-unit-test\log_macros_test.cpp" />
+    <ClCompile Include="..\test\plog-unit-test\main.cpp" />
+    <ClCompile Include="..\test\plog-unit-test\message_test.cpp" />
+    <ClCompile Include="..\test\plog-unit-test\monoappender_logger_test.cpp" />
+    <ClCompile Include="..\test\plog-unit-test\non_singleton_log_test.cpp" />
+    <ClCompile Include="..\test\plog-unit-test\raw_formatter_test.cpp" />
+    <ClCompile Include="..\test\plog-unit-test\txt_formatter_test.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>

File msvc/plog-unit-tests-vs12.vcxproj.filters

+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="error handling">
+      <UniqueIdentifier>{ae4b1f09-11c4-4acc-b163-77c9861b89f7}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="formatters">
+      <UniqueIdentifier>{4bc345f4-bc39-41b9-b497-71f4d3dc2591}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="initialization &amp; holding">
+      <UniqueIdentifier>{dbb83b85-a02e-4977-b1f8-8f2edf080498}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="loggers">
+      <UniqueIdentifier>{ac52d788-7f39-45a0-9646-6a8d1f8823b4}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="main">
+      <UniqueIdentifier>{25b4b805-7f3e-411b-bffe-8ad25e53c45d}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="message">
+      <UniqueIdentifier>{77a272d9-fefb-4145-8578-5210ea4901d5}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\test\plog-unit-test\error_observer_test.cpp">
+      <Filter>error handling</Filter>
+    </ClCompile>
+    <ClCompile Include="..\test\plog-unit-test\csv_formatter_test.cpp">
+      <Filter>formatters</Filter>
+    </ClCompile>
+    <ClCompile Include="..\test\plog-unit-test\raw_formatter_test.cpp">
+      <Filter>formatters</Filter>
+    </ClCompile>
+    <ClCompile Include="..\test\plog-unit-test\txt_formatter_test.cpp">
+      <Filter>formatters</Filter>
+    </ClCompile>
+    <ClCompile Include="..\test\plog-unit-test\initialization_test.cpp">
+      <Filter>initialization &amp; holding</Filter>
+    </ClCompile>
+    <ClCompile Include="..\test\plog-unit-test\non_singleton_log_test.cpp">
+      <Filter>initialization &amp; holding</Filter>
+    </ClCompile>
+    <ClCompile Include="..\test\plog-unit-test\custom_logger_test.cpp">
+      <Filter>loggers</Filter>
+    </ClCompile>
+    <ClCompile Include="..\test\plog-unit-test\monoappender_logger_test.cpp">
+      <Filter>loggers</Filter>
+    </ClCompile>
+    <ClCompile Include="..\test\plog-unit-test\log_macros_test.cpp">
+      <Filter>main</Filter>
+    </ClCompile>
+    <ClCompile Include="..\test\plog-unit-test\main.cpp">
+      <Filter>main</Filter>
+    </ClCompile>
+    <ClCompile Include="..\test\plog-unit-test\message_test.cpp">
+      <Filter>message</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>

File msvc/plog-vs08.vcproj

 				PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
 				MinimalRebuild="true"
 				BasicRuntimeChecks="3"
-				RuntimeLibrary="0"
+				RuntimeLibrary="1"
 				UsePrecompiledHeader="0"
 				ProgramDataBaseFileName="$(OutDir)\$(ProjectName)-vs2008-$(ConfigurationName)-$(PlatformName).pdb"
 				WarningLevel="4"
 				>
 			</File>
 			<File
+				RelativePath="..\src\plog\cfq_appender.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\include\plog\cfq_appender.h"
+				>
+			</File>
+			<File
 				RelativePath="..\src\plog\debug_output_appender.cpp"
 				>
 			</File>
 				>
 			</File>
 			<File
-				RelativePath="..\src\plog\file_utils.cpp"
-				>
-			</File>
-			<File
-				RelativePath="..\src\plog\file_utils.h"
-				>
-			</File>
-			<File
 				RelativePath="..\src\plog\ostream_appender.cpp"
 				>
 			</File>
 				Name="monoappender"
 				>
 				<File