Причина, по которой модуль журналирования Python не использует эту стратегию, заключается в снижении производительности, которое оно влечет за собой. Если файлы журнала, повернутые в соответствии с размером или возрастом, просто неприемлемы, то, на мой взгляд, у вас есть два основных варианта: перезаписать файл журнала на месте, записать временный файл и заменить.
Если перезаписать файл журнала на месте, вы сначала должны выбрать в файле целочисленный адрес (позиция первого \ n байта плюс один), который станет «новым нулем» (назовите его X). Затем выберите размер блока, может быть 32K. Тогда начни считать. Искать в X + размер блока * номер блока, читать один блок. Искать размер блока * номер блока, записывать блок обратно. Когда вы достигнете EOF при чтении, обрежьте файл до размера блока длины * номер блока.
Если используется временный файл, найдите «новый ноль», скопируйте оставшуюся часть файла во временный файл, а затем переименуйте его в исходное имя. Я полагаю, это проще, чем выше, легче объяснить, но занимает больше места.
После всего этого запишите новые данные и закройте файл. Вся эта процедура должна происходить для каждого сообщения журнала. Удачи!