Ведение журнала за 3 дня — Android

#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. вау, самый эффективный и простой способ! спасибо, Джеффри ! 🙂