Вам нужно написать собственный производный класс streambuf. Пусть он выкладывает данные как в rdbuf вашего ofstream, так и в исходный rdbuf засорения.
Общий пример написания пользовательского streambuf:
http://www.dreamincode.net/code/snippet2499.htm
Сохранение нового потокового буфера может быть сделано следующим образом:
// grab buffer for clog
std::streambuf* oldClogBuf = std::clog.rdbuf();
// create custom buffer which feeds both clog and an ofstream
CustomBuffer* customBuf = new CustomBuffer( oldClogBuf );
// stash custom buffer
std::clog.rdbuf( customBuf );
...do stuff...
// restore original clog buffer
std::clog.rdbuf( oldClogBuf );
Вы можете сделать все это более надежным, используя идиому RAII для управления переключением буфера.