Единственный способ сделать то, что вы описываете в одном файле, - это зарезервировать все пространство, которое вам понадобится для предварительных записей в журнале, что, я полагаю, вы не сможете сделать, потому что не знаю, какими большими они будут.
Вы не можете просто вставить в файл, перемещая содержимое над точкой вставки, чтобы освободить место. Это просто не концепция, которую поддерживают обычные файловые системы. Вам нужно было бы физически прочитать и переписать все «выходные» фрагменты, чтобы вставить «журнальный» фрагмент, что потребовало бы все больших объемов работы по мере роста файла.
Лучше всего было бы написать два отдельных файла, а затем соединить их вместе в конце.
Редактировать после комментария Шарпи: Поскольку вывод представляет собой набор команд для программы, значит ли это, что вы можете смело предполагать, что он никогда не будет больше пары МБ, и просто встроить его в память перед тем, как записать все за один раз?