Я писал программу на C ++ и задаюсь вопросом, может ли кто-нибудь помочь мне с ситуацией, описанной здесь.
Предположим, у меня есть файл журнала размером около 30 МБ, я скопировал последние 2 МБ файла в буфер программы.
Я удаляю файл (или очищаю содержимое), а затем записываю обратно 2 МБ в файл.
Пока все работает нормально. Но проблема в том, что я читаю файл (последние 2 МБ) и очищаю файл (файл 30 МБ), а затем записываю обратно последние 2 МБ.
В случае, если я копирую последние 300 МБ файла из файла объемом 1 ГБ, потребуется много времени.
У кого-нибудь есть идея сделать этот процесс проще?
При наличии большого файла журнала следует учитывать следующие причины.
Дисковое пространство: Файлы журнала представляют собой несжатый текст и занимают много места.
Типичное сжатие уменьшает размер файла на 10: 1. Однако файл не может быть сжат
когда он используется (заблокирован). Таким образом, файл журнала должен быть повернут из использования.
Системные ресурсы: Регулярное открытие и закрытие файла будет занимать много системы
ресурсов и это снизит производительность сервера.
Размер файла: Небольшие файлы легче резервировать и восстанавливать в случае сбоя.
Я просто не хочу копировать, очищать и перезаписывать последние конкретные строки в файл. Просто более простой процесс ....: -)
РЕДАКТИРОВАТЬ: не делать никаких внутренних процессов для поддержки ротации журналов.
logrotate - это инструмент.