require formatter to manage own flushing