#android #file #logging
#Android #файл #ведение журнала
Вопрос:
В моем приложении есть служба определения местоположения. В целях отладки я хочу зарегистрировать (в текстовый файл) некоторые события, такие как «новая координата», «service onDestroy», «service onStartCommand», «координата, отправленная на серверную часть» и так далее. Но я столкнулся с проблемой. Файл журнала получает более 350 новых строк каждый день .. итак .. через 3 дня у меня есть файл с 1000 строками.
Моя идея состоит в том, чтобы вести только 3 (или N в этом случае) последних дня и удалять содержимое, которое было написано более 3 дней назад.
Но:
- Я не хочу проверять при каждой записи, есть ли старые строки, которые необходимо удалить
- Я не хочу устанавливать будильник, который срабатывает каждые 3 дня, чтобы стереть старые данные.
Не могли бы вы, пожалуйста, сказать мне, знаете ли вы другой эффективный способ справиться с этой ситуацией?
Ответ №1:
Без способа индексирования в текстовый файл на самом деле нет способа решить проблему, не прочитав каждую строку файла (до определенного момента), проанализировав его и найдя дату.
Не сохраняйте файл. Сохраняйте базу данных. Пусть в одном из столбцов будет указано «время создания». Затем вы можете легко удалить строки, время создания которых превышает некоторый порог.
getContentResolver().delete(
yourUri,
"created_time < ?",
new String[] { System.currentTimeIllis() - Integer.toString(TimeUnit.DAYS.toMillis(3)
);
(Или что-то еще, пожалуйста, протестируйте свой собственный SQL …)
В качестве дополнительного примечания, текстовый файл в 1000 строк — это ничто. Чтение и синтаксический анализ этого файла не имеет значения, если вы не делаете это часто. Если вы читаете и урезаете файл 1 раз в день, никаких проблем.
Другим решением было бы повернуть файлы (log -> log.1, log.1 -> log.2, …, log.n-1 — > log.n). Это, конечно, не устанавливает жесткого ограничения на размер какого-либо конкретного файла.
Комментарии:
1. вау, самый эффективный и простой способ! спасибо, Джеффри ! 🙂