By the way, logging classes should also follow this design (I mean the design of the standard library): separate formatting (std::ostream) and the target (std::streambuf).
For example, if your logger only implements formatting operations, it could inherit from std::ostream and use the standard std::streambufs available (filebuf, stringbuf, ...). By deriving from std::ostream it would also benefit from the features that it provides. Unfortunately, standard streams are not easy to implement; however boost provides a simpler API on top of it with its boost.iostream library.