I'm now in the process of developing the logging system. I've managed to override clog and cerr with custom source buffers. The source distributes output to various sinks. Currently, I've got basic console, file, and message (box) sinks implemented. The concept is similar to what I had in C, with the addition of wchar_t support.
While writing the win32 implementations of the console and message sinks, I ran into the issue of how to deal with multiple platform implementations. In C, I would compile-in platform specific source files, chosen by the build system, which would provide implementations for platform-dependent functions. With C++, you would derive platform specific classes from an abstract base class. The problem was how to choose which implementation to instantiate at build-time. Suddenly I realized the awsome power of the abstract factory pattern! I had never really understood its usefulness before. Case closed.