В качестве простого способа сохранить несколько журналов состояния и т. Д. Я выбрал std::stringstream
. В случае ошибки я могу просто выгрузить .rdbuf()
в файл, чтобы иметь возможность воспроизвести то, что делала моя программа до ее сбоя.
Моя проблема сейчас в том, что этот струнный поток неограниченно увеличивается в размерах. Я пробовал несколько вещей, чтобы гарантировать, что я сохраняю только последний 1 МБ или около того потока, но безуспешно.
.rdbuf()->pubseekoff(...)
.ignore(...)
getline(...)
ss.str() = ss.str().substr(...)
Очевидно, что базовый буферный объект всегда только увеличивается в размере - независимо от того, были ли уже прочитаны некоторые данные или нет.
Есть ли способ уменьшить размер / удерживать его на каком-то постоянном уровне (желательно без обычных глубоких копий)? Круговой буфер в качестве базового объекта буфера был бы идеальным - возможно ли это? Esp. это уже существует?
РЕДАКТИРОВАТЬ: Решение в основном должно вести себя как поток. Он размещается компилятором вместо std :: err или прямого файлового потока (аналогично boost :: log). Следовательно, использование строкового потока не является строго необходимым, но очень полезным. (В противном случае мне пришлось бы реализовать все вещи ostream, чтобы иметь возможность передавать std :: endl ...)
std::ofstream
и вместо этого напрямую выполнять сброс в файл журнала? - person AJG85   schedule 12.09.2013oss.str(""); oss.clear();
для сброса. - person AJG85   schedule 12.09.2013